0

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

1 回答 1

0

你需要再打电话setInterval

myLoop = setInterval(empMove, 2500);

既然,clearInterval会毁了它。

从技术上讲,您可以在将margin-topback 设置为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);

免责声明:未经测试。

于 2013-01-17T00:11:48.883 回答