本文介绍了$('body,html').is(':animated'))似乎不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有4个div,其高度设置为窗口高度.我想在每次向下滚动时滚动到下一个,但是在第一次向下滚动后,它一直在滚动,似乎忽略了is:animated
I have 4 divs with heights set to window height. I want on each scroll down to scroll to the next one, however after the first scroll down it just keeps on scrolling, seemingly ignoring is:animated
<style>
.div {
width: 100%;
}
.red {
background: red;
}
.yellow {
background: yellow;
}
.green {
background: green;
}
.blue {
background: blue;
}
</style>
<div id="id0" data-id="0" class="nbhd red scrolledto"></div>
<div id="id1" data-id="1" class="nbhd yellow"></div>
<div id="id2" data-id="2" class="nbhd green"></div>
<div id="id3" data-id="3" class="nbhd blue"></div>
function setHeights() {
$('.nbhd').css('height', window.innerHeight);
}
function scrollSections() {
if ($('body, html').is(':animated')) {
return;
}
var currentSectionId = $('.nbhd.scrolledto').data('id');
currentSectionId++;
$('.scrolledto').removeClass('scrolledto');
var section = $('#id'+currentSectionId);
section.addClass('scrolledto');
var pos = section.offset().top;
$('body, html').animate({scrollTop: pos}, 1000, function() {
console.log('animated');
});
}
setHeights();
$( window ).on( "scroll", function() {
scrollSections();
});
小提琴: https://jsfiddle.net/2d47k6af/
由于某些原因,我也会得到animated
6次登录,我希望是3.
I also get animated
logged 6 times for some reason, I expected 3.
推荐答案
您可以使用变量来实现所需的内容:
You can to use variable to achieve, what you want:
function setHeights() {
$('.nbhd').css('height', window.innerHeight);
}
var isAnimated = false; // Initialize variable
function scrollSections() {
if (isAnimated) return; // Previous animation still in action
isAnimated = true; // lock it
var currentSectionId = $('.nbhd.scrolledto').data('id');
currentSectionId++;
var section = $('#id'+currentSectionId);
if (!section.length) {
currentSectionId = 0;
section = $('#id0');
}
$('.scrolledto').removeClass('scrolledto');
section.addClass('scrolledto');
var pos = section.offset().top;
$('body').animate({scrollTop: pos}, 1000, function() {
setTimeout(function(){
isAnimated = false; // unlock it on next eventloop tick
})
});
}
setHeights();
$( window ).on( "scroll", function() {
scrollSections();
});
.div {width: 100%;}
.red {background: red;}
.yellow {background: yellow;}
.green {background: green;}
.blue {background: blue;}
<div id="id0" data-id="0" class="nbhd red scrolledto"></div>
<div id="id1" data-id="1" class="nbhd yellow"></div>
<div id="id2" data-id="2" class="nbhd green"></div>
<div id="id3" data-id="3" class="nbhd blue"></div>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
这篇关于$('body,html').is(':animated'))似乎不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!