Jquery mega菜单由于延迟而显示多个菜单

Jquery mega菜单由于延迟而显示多个菜单,jquery,hover,megamenu,Jquery,Hover,Megamenu,嗨,我为电子商务平台创建了一个jquery megamenu。我将其设置为,当您将鼠标悬停在顶层的某个li上时,它的所有同级ul将消失,并且相关的一个将出现。问题是,如果你将鼠标悬停在“手套”上,那么“头盔”很快就会出现“手套”,好像有延迟。然而,如果你很快从“头盔”变为“手套”,效果很好。有什么想法吗?谢谢 这是jquery代码和指向站点的链接 //将控制器类添加到顶层的 $('#menu.accordio ul li').parent().parent().parent().addClas

嗨,我为电子商务平台创建了一个jquery megamenu。我将其设置为,当您将鼠标悬停在顶层的某个li上时,它的所有同级ul将消失,并且相关的一个将出现。问题是,如果你将鼠标悬停在“手套”上,那么“头盔”很快就会出现“手套”,好像有延迟。然而,如果你很快从“头盔”变为“手套”,效果很好。有什么想法吗?谢谢

这是jquery代码和指向站点的链接

//将控制器类添加到顶层的
  • $('#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();
        },
    );