0

setIntervalを使用してループを実行する関数があります。関数empMoveは、マージントップを毎回-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-top技術的には、に戻った後にそれを行うことができます0

clearInterval(myLoop);
$('.emp-wrap').delay(2500).queue(function(next){
  $('.emp-wrap').css('margin-top', '0');
  myLoop = setInterval(empMove, 2500);
  next();
});

ただし、ステートメントに応じempMoveてマージンを減らすか、リセットするように変更すると、よりクリーンになります。0if

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 に答える