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 > > > > > >