我寫了一個自定義動畫函數。它通常工作得很好,但是當我用不同的endCallbacks快速連續呼叫animate();
時,有時候回調會非常糟糕,導致在錯誤的時間進行錯誤的操作。如果多次調用同一函數的前一個實例,該如何停止?
問題是函數實例化多次並執行直到達到endValue。 currentValue被改變得非常快,以至於我只能看到我的html頁面動畫中的最後一個值。這隱藏了這種不需要的行爲。
我第二次撥打animate();
時需要的是結束animate();
的第一個實例,並用新值和新回調觸發一個新實例。同時我也想停止setTimeout()
函數,以確保沒有錯誤的回調被觸發。
window.onload = function(){
document.addEventListener('click', // some button
function(){
animate(1, 10);
}, false
);
}
function animate(startValue, endValue, callback, endCallback) {
var startValue = startValue,
currentValue = startValue,
endValue = endValue,
callback = callback,
timeout = null;
loopAnimation();
function loopAnimation(){
if (currentValue != endValue){
timeout = setTimeout(function(){
currentValue++;
// Callback executes some page manipulation code
if (typeof callback !== "undefined") callback(currentValue);
console.log(currentValue);
loopAnimation();
},500)
} else {
console.log("This callback triggers some specific changes in my page");
if (typeof endCallback !== "undefined") endCallback();
}
}
}
而是在控制檯中看到的: 1,2,3, - 1,4,2,5 ...... 6,9,7,10,8,9,10
我'd喜歡看: 1,2,3, - 1,2 ... 7,8,9,10
但請記住,由於我在腳本中使用animate()
的方式,我可以絕對不要了解輸入變量的名稱或範圍。這使我無法自己解決它。
你不能阻止一個功能從另一個執行。假設您正在使用jquery進行動畫,您可以調用一個'.stop'方法來停止在該元素上運行的所有動畫。 http://api.jquery.com/stop/ – lwalden 2015-03-08 21:35:58