我正在使用以下脚本来显示响应式菜单。在IE7中,脚本使页面冻结,并且表示页面“由于长时间运行的脚本而没有响应”。我发现导致冻结的位是代码底部的window.bind
部分,并且从我的研究到目前为止表明它在IE7中导致无限循环。我已经阅读了关于使用setTimeout等的答案,但我非常新手并且不知道如何在脚本中实现它。我有什么想法可以阻止这个脚本崩溃/冻结IE7吗?
这是一个涉及this blog post超时的解决方案,但我不知道如何使用下面的脚本实现它
/* Sample scripts for RWD nav patterns
(c) 2012 Maggie Wachs, Filament Group, Inc - http://filamentgroup.com/examples/rwd-nav- patterns/GPL-LICENSE.txt
Last updated: March 2012
Dependencies: jQuery
*/
jQuery(function($){
$('.nav-primary')
// test the menu to see if all items fit horizontally
.bind('testfit', function(){
var nav = $(this),
items = nav.find('a');
$('body').removeClass('nav-menu');
// when the nav wraps under the logo, or when options are stacked, display the nav as a menu
if ( (nav.offset().top > nav.prev().offset().top) || ($(items[items.length-1]).offset().top > $(items[0]).offset().top) ) {
// add a class for scoping menu styles
$('body').addClass('nav-menu');
};
})
// toggle the menu items' visiblity
.find('h3')
.bind('click focus', function(){
$(this).parent().toggleClass('expanded')
});
// ...and update the nav on window events
$(window).bind('load resize orientationchange', function(){
$('.nav-primary').trigger('testfit');
});
});
答案 0 :(得分:2)
我将查看John Resig撰写的这篇文章http://ejohn.org/blog/learning-from-twitter/
基本上,他建议不要直接将函数绑定到事件,而是每隔250ms运行一次函数。
var outerPane = $details.find(".details-pane-outer"),
didScroll = false;
$(window).scroll(function() {
didScroll = true;
});
setInterval(function() {
if ( didScroll ) {
didScroll = false;
// Check your page position and then
// Load in more results
}
}, 250);
如果浏览器同时触发许多事件,那将会更有效率。您不会在页面开头处运行20次resize事件。