下面的代码允许您启动该过程,并中断它以执行相反的操作:
(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);
});
}());
演示:http: //jsfiddle.net/NcdZT/1/
我确信有些东西可以被浓缩并变得更有效率(比如if
语句),但这似乎是可读的并且可以实现你想要的。
跟踪setTimeout
允许进程被中断。如果您将超时时间从 80 增加到更明显的值(或者如果您单击得足够快),您会看到“动画”可以在中途反转。