2015-10-22 100 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也是超级新手。我希望我能为你提供友善的额外声望点。我认为这里的一些人生活在桥梁之下。 –