使用 scrollTop 在 JQuery 中清除和设置间隔

Clear and Set interval in JQuery using scrollTop

我想设置和清除间隔,当我滚动(到达)到特定的 divs 时,但是,它不适用于 scrollTop。

它应该clear/stop我向下滚动到第二个时的间隔div但它不会停止并继续前进。

JQuery:


function imageSlide() {
    $('#my-image').fadeOut(1000).fadeIn(1000);
  }


$(window).scroll(function() {
    var scroll_top = $(document).scrollTop();
    var fisrt_div_top = $('#first-div').position().top;
    var second_div_top = $('#second-div').position().top;

    if(scroll_top >= fisrt_div_top && scroll_top < second_div_top){
      intervalID = setInterval(imageSlide, 2000);
    }
    if(scroll_top > second_div_top){
        clearInterval(intervalID);
    }
});

您不止一次设置了时间间隔。您需要检查以确保您尚未将其设置为这种情况。

 if(scroll_top >= fisrt_div_top && scroll_top < second_div_top){
      intervalID = setInterval(imageSlide, 2000);
    }

像这样。

function imageSlide() {
  console.log('image slide is happening');
}


$(window).scroll(function() {
  var scroll_top = $(document).scrollTop();
  var fisrt_div_top = $('#first-div').position().top;
  var second_div_top = $('#second-div').position().top;

  if(
    scroll_top >= fisrt_div_top &&
    scroll_top < second_div_top &&
    window.intervalID === undefined
  ){
    window.intervalID = setInterval(imageSlide, 2000);
  }
  if(scroll_top > second_div_top){
    clearInterval(window.intervalID);
  }
});
html {
  overflow-y: scroll; /* Show vertical scrollbar */
  overflow-x: scroll; /* Show horizontal scrollbar */
  height: 9000px !important;
  width: 9000px !important;
}

#first-div {
  position: absolute;
  top: 100px;
  height: 100px;
  border: 1px black solid;
}

#second-div {
  position: absolute;
  top: 300px;
  height: 100px;
  border: 1px black solid;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

  <div id="first-div">div one</div>
  
  <div id="second-div">div two</div>