我正在制作一个功能丰富的菜单。我必须在其他开发人员的系统上实现它,所以我还没能成功地对它做些改动。但是,如果我把它放在页面上几分钟,然后再激活它,浏览器就会冻结一秒钟或更多,甚至可能导致“这个脚本导致页面冻结等等”。
我想这和我的计时器有关。所以我希望有人能看看用计时器运行的函数,因为我的其他函数是由mouseevents触发的,看看它们是否有意义。我知道有很多代码,但如果你特别地寻找计时器,我认为比我更有经验的人可以得到它的jist。我得系好安全带,看看我是否有一把小提琴可以用。
触发延迟本身的按钮是代码中第二个定时器内的ul.downArrow。
/* Check if submenu should be closed */
var timer;
$jq('#subNavigationContainer').hover(
function(){
clearTimeout(timer);
},
function(){
var checkNavVariation = $jq('#subNavigationContainer').hasClass('small');
timer=setTimeout(function () {
if(checkNavVariation == false){
$jq('#subNavigationContainer').animate({
height: ['50px', 'easeOutSine']
}, 600, 'linear');
var testLevel = $jq('#navigationContainer ul li.pathed').size();
$jq('#subNavigationContainer ul,#subNavigationContainer #subMenuDescription').fadeOut('fast');
setTimeout(function () {
/* Indicate we want breadcrumb to open */
$jq('#subNavigationContainer').addClass('isClosed');
if(testLevel < 1) {
$jq('#navigationContainer ul li').removeClass('selected');
}
$jq('#navigationContainer ul li').children('.selArrow').remove();
}, 600);
}
}, 1500);
}
);
setTimeout(function(){
$jq('ul.downArrow').click(function() {
loadMenu();
});
setTimeout(arguments.callee,1200);
},1200)
/* Automatic check for breadcrumb */
var counter = 0;
setTimeout(function(counter){
var subNavVisible = $jq('#subNavigationContainer').css('display');
var subNavClosed = $jq('#subNavigationContainer').hasClass('isClosed');
if(subNavClosed == true) {
if(counter == 0) {
$jq('#subNavWrapper ul').remove();
$jq('#subNavWrapper div.subMenuDescription').remove();
} else {
$jq('#subNavWrapper ul.downArrow').remove();
$jq('#subNavWrapper div.subMenuDescription').remove();
$jq('#subNavWrapper ul.levelTwo').remove();
$jq('#subNavWrapper ul.levelThree').remove();
$jq('#subNavWrapper ul.levelFour').remove();
}
$jq('#subMenuDescription').remove();
$jq('#navigationContainer ul.levelOne').children('li.pathed').each(function() {
/* Mark the top menu */
$jq(this).siblings('li').removeClass('hover').removeClass('selected');
$jq(this).siblings('li').children('.selArrow').remove();
$jq(this).addClass('selected').addClass('hover');
var liWidth = $jq(this).width();
liWidth = (liWidth / 2) - 15;
$jq(this).append('<div class="selArrow" style="margin-left: '+liWidth+'px"></div>');
var highestHeight = 50;
$jq(this).children('ul').clone().appendTo('#subNavWrapper').addClass('cloned');
$jq(this).children('ul').children('li.selected').children('ul').clone().appendTo('#subNavWrapper').addClass('cloned');
$jq(this).children('ul').children('li.selected').children('ul').children('li.selected').children('ul').clone().appendTo('#subNavWrapper').addClass('cloned');
var hasLevel = $jq('#subNavWrapper ul.levelThree li.pathed').size();
$jq('#subNavWrapper ul').css('display','none');
/* Check for grey submenu area visible or not */
var subNavVisible = $jq('#subNavigationContainer').css('display');
if(subNavVisible != "block") {
$jq('#subNavigationContainer').css('height','0px');
$jq('#subNavigationContainer').css('display','block');
$jq('#subNavigationContainer').addClass('small');
$jq('#subNavigationContainer').animate({
height: [highestHeight+'px', 'easeOutSine']
}, 300, 'linear');
} else if(subNavVisible == "block") {
$jq('#subNavigationContainer').animate({
height: [highestHeight+'px', 'easeOutSine']
}, 300, 'linear');
}
$jq('#subNavWrapper ul').css('height','2px').css('width','200px').css('display','block');
$jq('#subNavWrapper ul li').css('display','none');
$jq('#subNavWrapper ul li.pathed').addClass('breadcrumb');
$jq('#subNavWrapper ul li.pathed').fadeIn('fast');
$jq('#subNavWrapper ul li.pathed:last').parent('ul').after('<ul class="downArrow"><li><img src="http://dev.ghostwriter.no/demo/altibox/images/arrow-down.gif" alt="Ekspander" /><span>Utvid meny</span></li></ul>');
$jq('#subNavWrapper ul').animate({
height: ['21px', 'easeOutSine']
}, 100, 'linear');
counter++;
$jq('#subNavigationContainer').removeClass('isClosed');
});
} else if(subNavClosed == false) {
}
setTimeout(arguments.callee,750)
},750)
发布于 2011-06-28 12:33:23
有计时器检查菜单是否打开,如果没有,它将打开一个面包屑样区域。
当菜单关闭并触发显示您的面包屑样区域时,最好先处理一下。不需要暂停。
--有一个计时器在检查面包屑中的箭头,这将再次打开菜单
只需处理单击面包屑中的箭头并在处理程序中打开菜单即可!这里不需要暂停。
https://stackoverflow.com/questions/6502777
复制相似问题