In fact, if you find yourself wanting to do a lot of stuff when scrolling has stopped, you could add an event for it (again, untested):
(function($) { var scrollTimeoutID; $(window).bind('scroll', function() { clearTimeout(scrollTimeoutID); scrollTimeoutID = setTimeout(function() { $(window).trigger('scrollstop'); }, 300); }); })(jQuery); $(document).ready(function() { var topOffset = 100; $("#label").css('top', topOffset + "px"); $(window).bind('scrollstop', function() { $("#label").animate({top: $(document).scrollTop() + topOffset}, "slow", "easein"); }); }); Hope it helps. --Erik On 9/1/07, Erik Beeson <[EMAIL PROTECTED]> wrote: > Approaching the problem a different way, how about only firing the > animation if scrolling has paused for a moment? Maybe something like > (untested): > > $(document).ready(function() { > var scrollTimeoutID; > var topOffset = 100; > $("#label").css('top', topOffset + "px"); > > $(window).bind('scroll', function() { > clearTimeout(scrollTimeoutID); > > scrollTimeoutID = setTimeout(function() { > $("#label").animate({top: $(document).scrollTop() + topOffset}, > "slow", "easein"); > }, 300); > }); > }); > > You should probably play around with that 300 to find the optimum > setting for you. > > Hope it helps. > > --Erik > > > On 9/1/07, emi polak <[EMAIL PROTECTED]> wrote: > > no luck heh? :( > > > > > > On 9/1/07, emi polak <[EMAIL PROTECTED]> wrote: > > > Hi, > > > I am altering the "top" property of a floating label in a webpage. The > > "top" adjustement is fired at page scroll, so that the label would always > > stay in its place. > > > Now I would like to animate the label between its oldPosition and > > newPosition. So I use animate() to set the "top" property, but the method > > starts many times during the page scroll, thus creating a very buggy and > > slow motion. > > > > > > So: is there a way to cancel an already started animation, so that when > > "scroll", the animation is first canceled and then its fired again? > > > > > > Here is what I'm using now: > > > > > > var topOffset = 100; > > > $("#label").css('top', topOffset + "px"); > > > > > > $(window).bind("scroll", function() { > > > var newScrollTop = $(document).scrollTop(); > > > var newPos = newScrollTop + topOffset; > > > > > > $("#label").animate({ > > > top: newPos > > > }, "slow", "easein"); > > > }); > > > > > > Thank you! > > > emipolak > > > > > > > > > > >