1

埋め込みタグの SVG に小さな問題があります。javascript を使用して SVG ファイル パスで埋め込みタグのソースを更新します。次に、viewbox 属性を更新して、SVG のサイズを正しく変更する必要があります。

問題は、JavaScript の実行が速すぎるため、SVG タグが使用できないことです。

例 :

//Creation and insertion by JQuery
var EmbedTag = $("<embed id='zoomSVG' src=idSVG + ".svg' type='image/svg+xml' width='500px' height='500px' />").appendTo(zoomGalleryHisto);

//This doesn't work : svgDoc is null
//SVG document recovery
var svgDoc = document.getElementById('zoomSVG').getSVGDocument();

This work :
setTimeout(function(){
   //SVG document recovery
   var svgDoc = document.getElementById('zoomSVG').getSVGDocument();
},100);

タイムアウト値はハードウェアに依存するため、setTimeout 関数は使用したくありません。100ミリ秒でうまくいくこともありますが、普遍的な解決策を見つける必要があります。

埋め込みタグ挿入後、javascript で DOM をリロードできますか? 埋め込みオブジェクトの読み込みが完了したときの埋め込みタグのイベントは存在しますか?

ご協力いただきありがとうございます

4

3 に答える 3

0

最初に要素を作成し、次に DOM で再度検索しようとします。

第二に、JavaScript は何かが起こるまでブロックできません。代わりにコールバックを使用してください。

そんな感じ:

var svgDoc = false;
// Create an element
var EmbedTag = $("<embed id='zoomSVG' type='image/svg+xml' width='500px' height='500px' />");
// Append it to the dom
EmbedTag.appendTo(zoomGalleryHisto);

// Load the svg file
$.get('file.svg', function() {
    // And then add it to the created element
    EmbedTag.attr('src', 'file.svg');
    svgDoc = EmbedTag.getSVGDocument();
});
于 2013-02-22T09:45:42.233 に答える
0

タグの »onload« イベントを使用して、ロードされるまで関数を遅延させます。

于 2013-02-22T09:34:22.883 に答える
0

埋め込みのオンロードからコードを呼び出します。

var EmbedTag = $("<embed id='zoomSVG' onload='init()' src=idSVG + ".svg' type='image/svg+xml' width='500px' height='500px' />").appendTo(zoomGalleryHisto);

次に、コードを init に実装します(または、呼び出したいものは何でも)

于 2013-02-22T09:34:38.193 に答える