:
(function() {
"use strict";
var doWork,
index,
boxes,
numBoxes,
workerTO;
index = 0;
boxes = $(".box1, .box2, .box3, .box4, .box5, .box6");
numBoxes = boxes.length;
doWork = function (changer, reverse) {
var direction, worker;
clearTimeout(workerTO);
direction = reverse ? -1 : 1;
worker = function() {
if (reverse) {
if (index < 0) {
index = 0;
return;
}
} else {
if (index >= numBoxes) {
index = numBoxes - 1;
return;
}
}
console.log(index);
changer(boxes.eq(index));
index += direction;
workerTO = setTimeout(worker, 80);
};
worker();
};
$("#home").click(function() {
doWork(function (el) {
el.addClass("animated");
});
});
$("#home2").click(function() {
doWork(function (el) {
el.removeClass("animated");
}, true);
});
}());
DEMO :http://jsfiddle.net/NcdZT/1/
나는 몇 가지가 응축 될 수있는 확신과 더 효율적으로 만들었지 만 (예 : if
) 읽기 쉽고 원하는 것을 얻을 수 있습니다.
setTimeout
을 추적하면 프로세스가 중단 될 수 있습니다. 타임 아웃을 80에서 좀 더 눈에 띄게 늘리면 (또는 충분히 빨리 클릭하면) "애니메이션"이 중간에 반전 될 수 있습니다.
출처
2013-08-02 18:11:04
Ian
질문이 너무 명확하지 않습니다. 이 문제를 효과적으로 재현하려면 관련 HTML 마크 업을 게시하십시오. –
**'start()'에서'setTimeout (start)'**를 사용해서는 안됩니다. 당신은'start()'의 지수 더미를 가질 것이다. – Trojan
@trojansdestroy 재귀라고합니다. 'setTimeout'은 각 호출을 지연시킵니다. 그게 뭐가 잘못 됐니? 내 말은, 이것에 관해 내가 바꿀만한 몇 가지가 있지만, 요점은 괜찮다. – Ian