问题
I have this code.
$(document).ready(function() {
$('#box').hide();
$(window).bind('scroll', function(){
if($(this).scrollTop() > 200) {
$("#box").fadeIn(300);
}
else {
$("#box").fadeOut(300);
}
});
});
So when I scroll down 200px it will make a div appear. When I scroll back up, it will disappear. This is fine, until I do it a lot.
If I scroll up and down like a nutter the div keeps fading in and out even after I stop. This isn't related to just this instance, it's happened a lot in the past and I've always wanted to know how to fix it (by making it stop as soon as I have, without doing it for everytime I scrolled up and down).
Is that possible?
回答1:
jQuery has a stop() method - http://api.jquery.com/stop/
This article describes how to use it, seems to be exactly what you're looking for: http://www.learningjquery.com/2009/01/quick-tip-prevent-animation-queue-buildup
回答2:
Use the stopdocs function
You simply need to call $('#box').stop(true,true).fadeIn(300);
and $('#box').stop(true,true).fadeOut(300);
respectively
回答3:
You have to add stop function to your queue like this: $('#box').stop(true).fadeOut(300);
function stop() description: see here
回答4:
Try using stop() before more animations are queued:
$(document).ready(function() {
$('#box').hide();
$(window).bind('scroll', function(){
if($(this).scrollTop() > 200) {
$("#box").stop().fadeIn(300);
}
else {
$("#box").stop().fadeOut(300);
}
});
});
See the documentation here: http://api.jquery.com/stop/
回答5:
.clearQueue() worked much better than .stop()
来源:https://stackoverflow.com/questions/7816641/stopping-jquery-from-doing-its-thing