2012-05-09 146 views

回答

2

您好我認爲這個問題是你的else塊。 jQuery然後開始動畫,需要約300毫秒。

var $test2 = $(".test2"); 
$(window).scroll(function() { 
    if ($(this).scrollTop() > 100) { 
     $test2.stop().animate({left: "200px"}, 300); 
    } else { 
     $test2.stop().animate({left: "-90px"}, 300); 
    } 
}); 

所以,只需使用jQuery的stop()方法來停止這些動畫即可。

在旁註:也許你應該想到不同的if/else語句,以便不像其他人建議的那樣通過每個滾動事件獲得動畫(或停止/重新啓動)。

+0

很感謝。完美的作品! – Michael

+0

不客氣! –

+0

我想不出一個不同的if/else語句,雖然...你認爲這樣做對性能不利嗎? – Michael

0

您的jsfiddle示例沒有延遲問題,但這可能是因爲窗口大小很小,滾動觸發的機會並不多。延遲的可能原因是滾動功能觸發的頻率。他們可以很快堆積起來,造成延誤。

添加console.log(如果使用Firebug)並查看控制檯中的頻率以更好地瞭解頻率。

+0

我嘗試過這種方法,並且它的啓動速度非常快。儘管如此,動畫開始很延遲: $(document).scroll(function(){ console.log($(document).scrollTop()); }) – Michael

+0

當你看它時,它反應速度快嗎? – Michael

1

這是我能想到的最佳解決方案,如果我錯了,請糾正我。

事件堆積並逐一被解僱。所以我的解決方案是將它們放在隊列中並在需要時清除隊列。

我用queue

DEMO

希望這有助於

+0

我更喜歡將功能放在定時器上,並在短時間停止滾動後觸發。像250ms。 –

+0

很酷。謝謝。工作很好。我並不完全瞭解排隊,但很好! – Michael