Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
if语句内的jQuery重置setInterval_Jquery_If Statement_Setinterval - Fatal编程技术网

if语句内的jQuery重置setInterval

if语句内的jQuery重置setInterval,jquery,if-statement,setinterval,Jquery,If Statement,Setinterval,我有一个使用setInterval运行循环的函数。empMove函数每次将页边距顶部减少-182px。我有另一个if语句要检查何时需要结束。在这里,我使用clearInterval来停止循环,并将边距顶部设置回零 问题是它会停止,但不会再次重新启动 很抱歉,我没有粘贴完整的代码,但这将是巨大的,分散了问题的焦点 // if statements to move carousel up $carouselNum = $('.carousella').length; $loopNum = $($c

我有一个使用setInterval运行循环的函数。empMove函数每次将页边距顶部减少-182px。我有另一个if语句要检查何时需要结束。在这里,我使用clearInterval来停止循环,并将边距顶部设置回零

问题是它会停止,但不会再次重新启动

很抱歉,我没有粘贴完整的代码,但这将是巨大的,分散了问题的焦点

// 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
}

您需要再次调用
setInterval

myLoop = setInterval(empMove, 2500);
因为,
clearInterval
会破坏它

从技术上讲,您可以在将
页边距顶部设置回
0
后执行此操作

clearInterval(myLoop);
$('.emp-wrap').delay(2500).queue(function(next){
  $('.emp-wrap').css('margin-top', '0');
  myLoop = setInterval(empMove, 2500);
  next();
});
但是,如果根据
if
语句修改
empMove
以减小边距或将其重置为
0
,则会更干净

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

免责声明:未经测试。

您从哪里开始?调用
clearInterval
后,它将停止,除非再次调用
setInterval
。是否还有其他原因会导致javascript再次运行条件语句?Hi@ShaneAndrade我尝试过,但它会继续循环,而不是重新启动循环。谢谢,我试过了,它继续循环,而不是从头开始。Thanks@ClintonGreen,您打算在
if
中使用
=
而不是
=
statement@ClintonGreen,也是一个对象@Alexnder谢谢我在“编辑后”尝试了你的完整解决方案,效果很好:)我也尝试了使用==而不是=,但是函数没有运行$loopNum只是返回一个值,所以我可以将其更改为变量。我还将尝试您关于更干净代码的建议。干杯