问题
I have a problem with the scrollTo
function when it is called by a jQuery animate
function.
Here my code:
$("#button").click(function(){
$("body").animate({scrollTop: 1400},"slow");
});
When I click the button, the flicker appears before the body scrolling. For example, I'm on (scroll position) 1000, and when I clicked the button the following happened:
- page/image on (scroll position) 1400 appears, it looks like I have already gone to (position) 1400
- then it moves again to (position) 1000, this happens so fast and looks like a flicker
- finally it scrolls to 1400 like a normal scroll..
On firefox it always appears, and sometimes on chrome also.
回答1:
I had the same flickering problem. It was caused by the hash anchor in the link that triggers the function. Fixed it with preventDefault():
$("#button").click(function(e){
e.preventDefault();
$("body").animate({scrollTop: 1400},"slow");
});
回答2:
<a href="#" onclick="return scrollFromTop(1400, 2000);">scroll</a>
function scrollFromTop(offset, duration) {
$('body').stop(true).animate({scrollTop: offset}, duration);
return false;
});
had the same problem... fixed it by returning false on the click handler
回答3:
solved this problem by stopping the animation like this:
$('body,html').bind('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function(e){
if ( e.which > 0 || e.type == "mousedown" || e.type == "mousewheel" || e.type == "touchmove"){
$("html,body").stop();
}
})
found there: Jquery .animate() stop scrolling when user scrolls manually?
来源:https://stackoverflow.com/questions/10614446/jquery-flicker-when-using-animate-scrollto