これにより、当然、時間の経過とともに非常に大きな背景位置値が生成されます
はい、コードが次のような場合、最終的に問題になる可能性があります
el.style.backgroundPosition= '0 '+n+'px';
n が大きな数値 (通常は 1000000000000000000000) に達すると、toString
指数表現に切り替わり、次のように設定しようとします。
el.style.backgroundPosition= '0 1e21px';
これは明らかなエラーです。一部のレイアウト エンジンは、おそらく 1<<31 ピクセルで早期に救済される可能性があります。それでも、何かを (たとえば) 32 ピクセルで 1 秒間に 60 回アニメーション化したとしても、その段階に到達するにはまだ 12 日かかります。
元に戻すピクセルパーフェクトなタイミングを正確に計算する必要がなくなると、私の人生が楽になります。
%
通常、すべてをリセットするのではなく、各カウンターでモジュロ演算子を個別に使用します。
var framen1= 30; // item 1 has 30 frames of animation
var framen2= 50; // item 2 has 50 frames of animation
...
var framei1= (framei1+1)%framen1; // 0 to 29 then reset
var framei2= (framei2+1)%framen2; // 0 to 49 then reset
または、時間ベースのアニメーションの場合:
var frametime1= 100; // item 1 updates 10 times a second
var frametime2= 40; // item 2 updates 25 times a second
...
var dt= new Date()-t0; // get time since started animation
var framei1= Math.floor(dt/frametime1) % framen1;
var framei2= Math.floor(dt/framelength2) % numberofframes2;
document.getElementById('div1').style.backgroundPosition= '0 '+(framei1*24)+'px';
document.getElementById('div2').style.backgroundPosition= '0 '+(framei2*24)+'px';
...