我有一个使用setInterval运行循环的函数。函数empMove每次将margin-top减少-182px。我在其中有另一个if语句来检查它何时需要结束。在这里,我使用clearInterval来停止循环,并将margin-top设置回零。
问题是它会停止但不会再次重启。
很抱歉,我没有粘贴整个代码,但这会很大,并且会分散注意力。
// if statements to move carousel up
$carouselNum = $('.carousella').length;
$loopNum = $($carouselNum * -182);
if($carouselNum > 1){
// function empMove, the '-=' allows the -margin-top to run every time. Without this it will set the margin-top to the same value every loop
var myLoop = setInterval(empMove, 2500);
function empMove() {
$('.emp-wrap').css('margin-top', '-=182');
console.log('loop start');
var marginTop = $('.emp-wrap').css('margin-top');
console.log(marginTop);
if(marginTop = $loopNum){
// do something
clearInterval(myLoop);
$('.emp-wrap').delay(2500).css('margin-top', '0');
console.log('loop stops');
};
};
}
else{
// do something
}
答案 0 :(得分:0)
您需要再次致电setInterval
。
myLoop = setInterval(empMove, 2500);
因为,clearInterval
会破坏它。
从技术上讲,您可以在将margin-top
设置回0
后执行此操作。
clearInterval(myLoop);
$('.emp-wrap').delay(2500).queue(function(next){
$('.emp-wrap').css('margin-top', '0');
myLoop = setInterval(empMove, 2500);
next();
});
但是,如果您修改empMove
以减少保证金或将其重置为0
,则会更加清晰,具体取决于if
声明。
var $empwrap = $('.emp-wrap');
var myLoop = setInterval(function() {
var marginTop = $empwrap.css('margin-top');
if (marginTop >= loopNum) {
$empwrap.css('margin-top', '0');
} else {
$empwrap.css('margin-top', '-=182');
}
}, 2500);
免责声明:未经测试。