32

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:

  1. page/image on (scroll position) 1400 appears, it looks like I have already gone to (position) 1400
  2. then it moves again to (position) 1000, this happens so fast and looks like a flicker
  3. finally it scrolls to 1400 like a normal scroll..

On firefox it always appears, and sometimes on chrome also.

3
  • 1
    Please provide a link to the scrollTo plugin for those needing it. Commented May 16, 2012 at 12:17
  • this is the sample. demos.flesler.com/jquery/scrollTo and this is where i got the plugin. flesler.blogspot.com/2007/10/jqueryscrollto.html Commented May 21, 2012 at 3:01
  • 1
    solved (probably). I use scrollTo plugin for detect hash tag, and when the button was clicked, i set it return true so the hash appear on the link and make the browser move to the selected id first before animated. i set it as false again and now it animate normaly. Commented May 29, 2012 at 7:16

4 Answers 4

82

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");
});
Sign up to request clarification or add additional context in comments.

2 Comments

Just to clarify: The problem is caused, because (1) the browser executes the jump to the anchor (2) then jQuery jumps back and scrolls slow to the anchor.
Thx, this solves my problem too. But what if i use this in multiple dropdown menus, to scroll to the next one and the last one has an active anchor. This will stop from redirecting to href.
7
<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

1 Comment

My problem got fixed after using .stop(true).
1

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?

Comments

0

Had the same problem while using "barryvdh/laravel-debugbar" package in laravel project. If that's your case, disable it.

1 Comment

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.