2015-10-22 198 views
0

我已經實現了滑動導航,它工作得非常好,直到你向下滾動。由於$ navigation_menu div是固定的,我必須編寫一個jquery腳本來強制關閉,當用戶向下滾動頁面並備份頁面時,然後嘗試再次使用導航時,導航jquery非常慢。Jquery滑動導航性能問題

我希望它只是我不知道在jQuery中的東西。

jQuery代碼

jQuery(document).ready(function($){ 
    var slid = false; 
    var right = $("#navigation_menu").css("right"); 

    $("#navigation").click(function(){ 
     if(!slid && right == "-300px"){ 
      $("#navigation_menu").animate({right: '0px'}); 
      slid = true; 
      return; 
     } 
     else if(slid){ 
      $("#navigation_menu").animate({right: '-300px'}); 
      slid = false; 
      return; 
     } 
    }); 

    $(window).scroll(function(){ 
     $("#navigation_menu").animate({right: '-300px'}); 
     slid = false; 
     $("$navigation_menu").unbind("scroll"); 
     return; 
    }); 
}); 

只是爲了澄清。導航在用戶向下滾動時關閉。導航將正確打開並關閉,直到用戶向下滾動。導航HTML和CSS完全正確。一旦用戶向下滾動,然後滾動回來使用導航,它會在很長的時間內痛苦地無響應,並且導航會永遠滑入設備的視口。

這是代碼的jsfiddle。請記住,這是爲移動設計的。我不知道這是否有所作爲。

http://jsfiddle.net/371fqnbo/1/

+0

你可以設置[snippet](https://blog.stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/)?或者http://jsfiddle.net? –

+0

增加了jsfiddle的例子。 –

+0

我沒有在問題中看到它.. –

回答

1

對我的作品完美的罰款時,我只能讓當它需要在由

if(slid){ 
.... 
} 

滾動和動畫之前調用.stop()做動畫。 (否則會有多個動畫會被執行,因爲滾動事件會被多次觸發,這些動畫會在動畫隊列中結束,只需調用動畫就可以將動畫放入隊列中(並且只會在所有其他動畫之後纔會完成)完成)。通過調用停止(),您可以清空該隊列,因此立刻讓你的動畫來完成)

http://jsfiddle.net/371fqnbo/2/

但是你的代碼中包含一些冗餘可能被淘汰。

+0

我想感謝您的幫助。 –

+0

不客氣..我想大家誰開始做動畫與jQuery,並沒有意識到動畫隊列運行一次在這種類型的問題... –

+0

我對jquery也是超級新手。我希望我能爲你提供友善的額外聲望點。我認爲這裏的一些人生活在橋樑之下。 –