Javascript 鼠标离开事件在导航菜单中持续触发

Javascript 鼠标离开事件在导航菜单中持续触发,javascript,jquery,navigation,mouseevent,Javascript,Jquery,Navigation,Mouseevent,以下是相关项目的链接: 所有HTML、Javascript和CSS都在一个HTML文件中 功能描述: 这是一个简单的动态水平导航条,当用户向下滚动页面时,该导航条将消失。在该导航条中,当用户将鼠标移到该区域时,触发器将被激活,该区域将向下滑动并重新出现,然后在鼠标移出时再次消失。当用户滚动回到顶部时,导航将返回默认(静态)状态…这就是问题所在 问题描述: 有时(是的,我不能每次都重新创建这个问题),当您返回页面顶部时,导航返回到默认状态,当鼠标离开此区域(不再向下滚动)时,导航将向上滑动并消失

以下是相关项目的链接:

所有HTML、Javascript和CSS都在一个HTML文件中

功能描述: 这是一个简单的动态水平导航条,当用户向下滚动页面时,该导航条将消失。在该导航条中,当用户将鼠标移到该区域时,触发器将被激活,该区域将向下滑动并重新出现,然后在鼠标移出时再次消失。当用户滚动回到顶部时,导航将返回默认(静态)状态…这就是问题所在

问题描述: 有时(是的,我不能每次都重新创建这个问题),当您返回页面顶部时,导航返回到默认状态,当鼠标离开此区域(不再向下滚动)时,导航将向上滑动并消失。有时它会在第一次尝试时发生,有时会在几次尝试后发生,主要是在Firefox2.0中,尽管我在Safari中已经发生过一两次

我的想法: 我对此感到困惑,为什么我要寻求帮助。如有任何建议,将不胜感激

重新创建问题 更新:我刚刚发现如何重新制造问题。您必须向下滚动并触发菜单至少一次,然后再滚动回顶部,在其中,由于某种原因,将鼠标悬停在菜单上会使其消失

代码:

<script type="text/javascript">
// Use short notation of DOM ready

$(function(){

// Assign variables for the menu, the trigger and the menu position (relative to the document)
var menu = $('#menu'),
    menuTrigger = $('#menu-trigger'),
    pos = menu.offset();

    // Listen for the scroll event
    $(window).scroll(function(){
        // If we scroll past the position of the menu's height and it has it's default style, then hide menu. 
        if($(this).scrollTop() > pos.top+menu.height() && menu.hasClass('default')){
            menu.fadeOut('fast', function(){
                  // Remove the default class and replace with fixed class
                  $(this).removeClass('default').addClass('fixed'); 
            });
            // Initiate the trigger to show and hide the menu with the mouse event
                   $(menuTrigger).removeClass('hidden').addClass('block').mouseenter(function(){
                $(menu).slideDown('fast').mouseleave(function(){
                $(menu).slideUp('fast');
                });
                });
        // If we scroll back to top and menu has fixed class, fadeIn menu
        } else if($(this).scrollTop() <= pos.top && menu.hasClass('fixed')){
            menu.fadeIn('fast', function(){
                // Hide the trigger
                $(menuTrigger).removeClass('block').addClass('hidden');

                // Give menu default style
                $(this).removeClass('fixed').addClass('default');
            });
        }
    });

});
</script>

//使用DOM就绪的简短符号
$(函数(){
//为菜单、触发器和菜单位置(相对于文档)分配变量
变量菜单=$(“#菜单”),
菜单触发器=$(“#菜单触发器”),
pos=菜单偏移量();
//收听滚动事件
$(窗口)。滚动(函数(){
//如果我们滚动过菜单高度的位置,并且它具有默认样式,则隐藏菜单。
if($(this.scrollTop()>pos.top+menu.height()&&menu.hasClass('default')){
menu.fadeOut('fast',function(){
//删除默认类并替换为固定类
$(this).removeClass('default').addClass('fixed');
});
//启动触发器以显示和隐藏带有鼠标事件的菜单
$(menuTrigger).removeClass('hidden').addClass('block').mouseenter(函数(){
$(菜单).slideDown('fast').mouseleave(函数(){
$(菜单).slideUp('fast');
});
});
//如果我们滚动回到顶部,菜单有固定的类,fadeIn菜单

}else if($(this).scrollTop()请在此处发布代码,而不是指向某些代码的链接。当该链接在不久的将来不可避免地中断时,此问题对社区将没有任何用处。好的,抱歉,Ray,这看起来太多了,但我会将其放在下面: