JavaScript のフェードとトランジションを含む複雑なアニメーション シーケンスがあります。一度に変化する 4 つの要素で構成されるこのシーケンスでは、setTimeout
各要素で a が使用されます。
Internet Explorer 9 でテストしたところ、アニメーションはリアルタイムで動作します (所要時間は 1.6 秒で、正確には 1.6 秒かかりました)。他のブラウザではアニメーション時間が 4 秒 (Firefox 3 および 4、Chrome、Opera) で、IE 8 以下では 20 秒ほどかかります。
他のすべてのブラウザーが泥沼にはまって動けない中、IE9 はどのように高速化できるのでしょうか?
私は要素を 1 つにマージして、いつでも 1 つの setTimeout を持つようにする方法を見つけようとしましたが、残念ながら、干渉 (別のリンクをクリックして新しいアニメーションを開始する前に開始するなど) には耐えられません。現在のものは終了しています)。
編集:コメントに応じて詳しく説明するために、コードの概要を次に示します。
link.onclick = function() {
clearTimeout(colourFadeTimeout);
colourFadeTimeout = setTimeout("colourFade(0);",25);
clearTimeout(arrowScrollTimeout);
arrowScrollTimeout = setTimeout("arrowScroll(0);",25);
clearTimeout(pageFadeOutTimeout);
pageFadeOutTimeout = setTimeout("pageFadeOut(0);",25);
clearTimeout(pageFadeInTimeout);
pageFadeInTimeout = setTimeout("pageFadeIn(0);",25);
}
4 つの関数はそれぞれ、フェードを 1 フレームずつ進めてから、アニメーションの終了まで、引数をインクリメントして別のタイムアウトを設定します。
http://adamhaskell.net/cw/index.html (ユーザー名: knockknock; パスワード: goaway)でページを見ることができます(サウンドと音楽があり、無効にすることができますが、注意してください!) - 私の JavaScript は非常にきちんと整理していないのでごちゃごちゃしていますが、少しコメントされているので、一般的なアイデアが何であるかを理解していただければ幸いです。