我遇到了一些問題,我試圖對元素進行動畫處理。我有一個遞歸函數動畫,其中包含setTimeout來延遲動畫。問題是調用遞歸方法後的下一行在調用動畫之前運行。例如,使用此代碼:javascript動畫:爲什麼下一行在動畫完成之前運行?
this.slideTo = function(x,y) {
var originalStyle = this.element.style.cssText;
var endX = x;
var endY = y;
var pos = this.getPosition();
var startX = pos.x;
var startY = pos.y;
var distX = x - pos.x;
var distY = y - pos.y;
var totalDistance = Math.sqrt((distX*distX) + (distY*distY));
var count = 0;
var done = false;
animate(this.element);
function animate(element) {
count += 5;
var curPos = _(element).getPosition();
var curDistX = endX - curPos.x;
var curDistY = endY - curPos.y;
var curDistance = Math.sqrt((curDistX*curDistX) + (curDistY*curDistY));
var percentDone = count/totalDistance;
var moveToX = Math.round((percentDone*distX) + startX);
var moveToY = Math.round((percentDone*distY) + startY);
_(element).moveTo(moveToX,moveToY);
if(percentDone <= 1) {
setTimeout(function(){animate(element);},1);
} else {
done = true;
}
}
console.log(done);
this.element.style.cssText = originalStyle;
}
控制檯顯示爲false,因爲它在動畫完成之前運行。我該如何解決這個問題?順便說一句:這是在鼠標事件上調用。這有什麼關係嗎?
因爲* setTimeout *異步運行,下列代碼行將立即運行y,* setTimeout *沒有停頓。它在函數完成後運行。 – RobG