Я хочу установить и очистить интервал, когда я прокручиваю (достигаю) определенных div, однако он не работает с scrollTop.
Он должен очищать/останавливать интервал, когда я прокручиваю вниз до второго 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.info('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>
Помещение окна перед intervalID все исправило. А также проверка, не определено ли значение window.intervalID. Спасибо.