這自然會產生非常大的背景下,位置值隨着時間的推移
是的,這最終可能成爲一個問題,如果你的代碼是這樣
el.style.backgroundPosition= '0 '+n+'px';
當n達到高數(通常爲1000000000000000000000)時,其toString
將切換爲指數表示,最終嘗試設置:
el.style.backgroundPosition= '0 1e21px';
這是一個明顯的錯誤。有可能一些佈局引擎可能會提前釋放,也許可能是31個像素。但即便如此,如果您以每秒60次(例如)32像素來動畫,則仍需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';
...