1

3000 以上のパスを持つモンスター アニメーション SVG ファイルを作成しました。各パスは、宣言型 SMIL アニメーションを使用して個別にアニメーション化します。IE9 の小さな js フォールバックを使用して、すべての新しいブラウザーでゆっくりと、しかし美しく再生されます。(リンクを投稿しますが、何も明確になりません。)

HTML5 とインライン SVG を使用してページを開発しました。作業を終えようとしているときに、モバイル ブラウザにこの巨大なファイルを強制的に詰まらせたくないことに気付きました。そのため、svg を外部ファイルに移動し、すべての xml 宣言を追加し直しました。ページ内の重要な情報が既にレンダリングされた後、いくつかの条件付きロジックと教科書 ajax を使用して、外部 svg を呼び出しています。

function loadThatSvg(){
    var xhr = new XMLHttpRequest;
    xhr.open('get','floral.svg',true);
    xhr.onreadystatechange = function(){
        if (xhr.readyState === 4) {
            if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 ) {
                var flowers = xhr.responseXML.getElementById('floralpaths');
                var stage = document.getElementById('stage');
                stage.appendChild(flowers);
            }
        }
    };
    xhr.send(null);
}

window.onload = function(){
    setTimeout(loadThatSvg,3000);
}

さまざまなブラウザーのインスペクター ツールは、ファイルが正しく読み込まれていることを示しています。問題は、アニメーションがトリガーされないため、何も起こらないことです! それらはDOMにあります。私はそれらを見ることができます。しかし、マークアップでSMIL アニメーションを開始するタイマーやイベントは、動的に読み込まれたアニメーション要素には適用されないようです。

しかし、その後、このユース ケースに焦点を当てた Bugzilla のバグ レポートを読み、問題が解決されたことを示唆しています (ただし、FF13 での私のテストでは、明らかに解決していません)。うーん...

動的にロードされた SVG コンテンツで SMIL アニメーションのクロックを開始するために使用できるカスタム関数または宣言はありますか? 答えが完全に「いいえ」であっても、私のような人々が何らかの方法で知っているといいでしょう. 明確にしていただきありがとうございます。

アップデート:

これが生のsvgファイルです。FF、Opera、および Webkit で動作します。しばらくお待ちください:

http://bit. ly/LC3LEQ

そして、同じドメインから、まったく同じ SVG ファイルを参照するページがあります。appendChild以前のコードのステートメントを変更しadoptNode()て、FF13 と Opera 11.64 で機能するメソッドを含めるようにしましたが、webkit でアニメーションが開始されることはありません。

http://bit. ly/Mk0lnz

4

2 に答える 2

3

これを行うにはいくつかの方法があります。アニメーション化されたドキュメントがメイン ドキュメントに既に挿入されていると想定していることに注意してください。

最初の方法は、スクリプトを使用してアニメーションを開始することです。

2 番目の方法は、アニメーション要素が相対的なドキュメント内の現在の時間をリセットすることです。これは機能する可能性があります。テストして確認する必要があります。

  • アニメーション ドキュメントのルート svg 要素を取得し、それに対して setCurrentTime(0) を呼び出します

2 つ目の方法を試してもうまくいかない場合は、次のように一時停止と再開を試すこともできます。

于 2012-06-08T08:27:04.840 に答える
0

ここで発生しているWebkitには多数のバグがあります。

https://bugs.webkit.org/show_bug.cgi?id=82647

https://bugs.webkit.org/show_bug.cgi?id=74801

Webkitでアニメーションを実行できる唯一の方法は、アニメーションを繰り返し処理し、svgマークアップからターゲット値を取得し、jquery animate()を使用して手動でアニメーション化することでした。svg固有の方法はどれも私にはうまくいきませんでした。

于 2012-06-19T17:11:04.830 に答える