Jquery mega菜单由于延迟而显示多个菜单
嗨,我为电子商务平台创建了一个jquery megamenu。我将其设置为,当您将鼠标悬停在顶层的某个li上时,它的所有同级ul将消失,并且相关的一个将出现。问题是,如果你将鼠标悬停在“手套”上,那么“头盔”很快就会出现“手套”,好像有延迟。然而,如果你很快从“头盔”变为“手套”,效果很好。有什么想法吗?谢谢 这是jquery代码和指向站点的链接Jquery mega菜单由于延迟而显示多个菜单,jquery,hover,megamenu,Jquery,Hover,Megamenu,嗨,我为电子商务平台创建了一个jquery megamenu。我将其设置为,当您将鼠标悬停在顶层的某个li上时,它的所有同级ul将消失,并且相关的一个将出现。问题是,如果你将鼠标悬停在“手套”上,那么“头盔”很快就会出现“手套”,好像有延迟。然而,如果你很快从“头盔”变为“手套”,效果很好。有什么想法吗?谢谢 这是jquery代码和指向站点的链接 //将控制器类添加到顶层的 $('#menu.accordio ul li').parent().parent().parent().addClas
//将控制器类添加到顶层的
$('#menu.accordio ul li').parent().parent().parent().addClass('parentitem');
//同时隐藏和显示整个类别和子类别
$('#menu.accordion a').addClass('menu#closed');
$('#menu.accordio a')。悬停(
函数(){
$(this.addClass('menu_open');
$(this.this('ul').fadeIn();
$('menu.accordio ul li').show();
}
);
$('ul.parentitem').mouseleave(函数(){
$(this.hide();
});
//将鼠标悬停在顶级菜单中的
$('#menu.accordion li')。悬停(函数(){
$(this).sides('li').children('ul.parentitem').hide();
$(this.children('ul.parentitem').css('z-index','10000');
});
//离开主菜单div,所有子菜单消失
$(“#菜单”).mouseleave(函数(){
$(this.children('li').children('ul').hide();
});
//将控制器类添加到每个子级别的
$('#menu.accordion')。children('li')。addClass('topline');
$('#menu.accordio ul.parentitem')。children('li')。addClass('finallines');
我认为你触发的悬停事件太多了,所以如果你快速移动鼠标,就会有很多事情发生
当您将鼠标悬停在顶级菜单项上时,您将鼠标悬停在两个选项上:
hover( handlerIn(eventObject) , handlerOut(eventObject) )
或
因此,在本例中,您使用的是handlerInOut,因为您在hover()中只使用了一个函数-因此,当鼠标进入和离开时,该函数将激发。这意味着,当您移入和移出顶级导航项时,会触发四个事件
另外,请注意,$('#menu.accordion li')
不仅会匹配顶级项目,还会匹配子菜单中的每个li
,并且您会为每个项目附加一个悬停事件。这件事太多了
因此,请尝试以下方法,而不是同时使用两个悬停:
$('#menu.accordion').children('li').hover(function(){
// Add here your code for mouse enter
$(this).siblings('li').children('ul.parentitem').hide();
$(this).children('ul.parentitem').css('z-index','10000');
$(this).find('a').addClass('menu_open');
$(this).find('ul').fadeIn();
// I'm not sure what the following is supposed to do...
// ...you are showing ul in all sub-menus.
$('#menu.accordion ul li ul').show();
}, function(){
// Add here your code for mouse leave
$(this).find('a').removeClass('menu_open');
$(this).children('ul.parentitem').css('z-index','0').hide();
},
);
您可能需要调整和清理上述代码-这只是一个一般的想法。对我来说很好。不知道问题是什么。我没有注意到任何延迟。无论如何,您可以做很多事情来改进jQuery—缓存您的对象并使用链接来加快速度。但我仍然不确定真正的问题是什么。干杯。如果您将鼠标悬停在任何不是头盔的菜单项上,并快速移动到“悬停在头盔上”(例如快速移动不同菜单项),则会出现头盔接头,但随后会被手套接头替换。感谢链接建议,我将看看如何将其清理干净
$('#menu.accordion li').hover(
hover( handlerIn(eventObject) , handlerOut(eventObject) )
hover( handlerInOut(eventObject) )
$('#menu.accordion').children('li').hover(function(){
// Add here your code for mouse enter
$(this).siblings('li').children('ul.parentitem').hide();
$(this).children('ul.parentitem').css('z-index','10000');
$(this).find('a').addClass('menu_open');
$(this).find('ul').fadeIn();
// I'm not sure what the following is supposed to do...
// ...you are showing ul in all sub-menus.
$('#menu.accordion ul li ul').show();
}, function(){
// Add here your code for mouse leave
$(this).find('a').removeClass('menu_open');
$(this).children('ul.parentitem').css('z-index','0').hide();
},
);