요소를 애니메이션화 할 때 문제가 발생합니다. 애니메이션을 지연시키기 위해 setTimeout을 포함하는 재귀 함수 animate가 있습니다. 문제는 재귀 메서드가 호출 된 후 다음 줄이 애니메이션이 호출되기 전에 실행된다는 것입니다. 예 :이 코드의 경우 :자바 스크립트 애니메이션 : 왜 애니메이션이 끝나기 전에 다음 줄이 실행됩니까?
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를 표시합니다. 이 문제를 어떻게 해결할 수 있습니까? btw : 이것은 마우스 이벤트에서 호출됩니다. 그게 그 일과 관련이 있을까요?
* setTimeout *이 비동기 적으로 실행되기 때문에 다음 코드 행은 immediatel y, * setTimeout *에 대한 일시 중지가 없습니다. 함수가 완료된 후에 실행됩니다. – RobG