jQuery在if语句中重置setInterval

时间:2013-01-17 00:07:28

标签: jquery if-statement setinterval

我有一个使用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
}

1 个答案:

答案 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);

免责声明:未经测试。