Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确隐藏滑动菜单?_Javascript_Jquery_Menu - Fatal编程技术网

Javascript 如何正确隐藏滑动菜单?

Javascript 如何正确隐藏滑动菜单?,javascript,jquery,menu,Javascript,Jquery,Menu,我有以下菜单: <div id="menuItem">Item1</div> <div id="subMenu"> <ul> <li>subitem1</li> <li>subitem2</li> <li>subitem3</li> </ul> </div> ​ 不幸的是,当鼠标离开子菜单时,子菜单消失

我有以下菜单:

<div id="menuItem">Item1</div>

<div id="subMenu">
<ul>
    <li>subitem1</li>    
    <li>subitem2</li>    
    <li>subitem3</li>    
</ul>
</div>
​
不幸的是,当鼠标离开子菜单时,子菜单消失。如何使子菜单仅在鼠标离开菜单项或子菜单列表时消失?我希望能够将鼠标悬停在子菜单上。请注意,两个菜单之间存在间隙


或者,如果您不想在menuitem中包含子菜单(这可能会弄乱您的CSS),您可以将所有内容包装在父div中,如:

HTML:


或者,如果您不想在menuitem中包含子菜单(这可能会弄乱您的CSS),您可以将所有内容包装在父div中,如:

HTML:

试试这个:

<div id="menuItem">Item1
   <div id="subMenu">
      <ul>
          <li>subitem1</li>    
          <li>subitem2</li>    
          <li>subitem3</li>    
      </ul>
   </div>
</div>
Item1
  • 子项1
  • 子项2
  • 子项3
这可以在我的浏览器(firefox)中使用。

尝试以下方法:

<div id="menuItem">Item1
   <div id="subMenu">
      <ul>
          <li>subitem1</li>    
          <li>subitem2</li>    
          <li>subitem3</li>    
      </ul>
   </div>
</div>
Item1
  • 子项1
  • 子项2
  • 子项3

这在我的浏览器(firefox)中起作用。

使子菜单实际上“在”您将事件附加到的菜单项中,这样,只有当用户实际离开菜单区域时,才会发生in/out事件

像这样:

$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).mouseleave(function() {
    $('#subMenu').hide(400);
});
​
css

#menuItem {

 cursor: pointer;
 width: 100px;
}

#menuItem .title {
    background-color: orange; 
}

#subMenu {
 background-color: grey;
 margin-top: 5px;   
 cursor: pointer;
 display:none;
 width: 80px;
}​
$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).mouseleave(function() {
    $('#subMenu').hide(400);
});
html

 <div id="menuItem">
    <div class="title">Item1</div>
    <div id="subMenu">
        <ul>
            <li>subitem1</li>    
            <li>subitem2</li>    
            <li>subitem3</li>    
        </ul>
    </div>
</div>​​​​​​​​​
友好提示:

<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
    <li>subitem1</li>    
    <li>subitem2</li>    
    <li>subitem3</li>    
</ul>
</div>
$('#subMenu').mouseenter(function() {
    $('#subMenu ul').slideDown(400);
    isInsideSubMenu = true;
}).mouseleave(function() {
    $('#subMenu ul').hide(400);
});
在设置菜单动画之前,您可能需要使用某种形式的
。停止(true,true)
,否则在菜单上快速来回移动光标将导致动画“堆叠”,用户只会感到陌生。请参阅此处的讨论:

所以看起来是这样的:

$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).mouseleave(function() {
    $('#subMenu').hide(400);
});
​

使子菜单实际上“在”您要将事件附加到的菜单项中,这样,只有当用户实际离开菜单区域时,输入/输出事件才会发生

像这样:

$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).mouseleave(function() {
    $('#subMenu').hide(400);
});
​
css

#menuItem {

 cursor: pointer;
 width: 100px;
}

#menuItem .title {
    background-color: orange; 
}

#subMenu {
 background-color: grey;
 margin-top: 5px;   
 cursor: pointer;
 display:none;
 width: 80px;
}​
$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).mouseleave(function() {
    $('#subMenu').hide(400);
});
html

 <div id="menuItem">
    <div class="title">Item1</div>
    <div id="subMenu">
        <ul>
            <li>subitem1</li>    
            <li>subitem2</li>    
            <li>subitem3</li>    
        </ul>
    </div>
</div>​​​​​​​​​
友好提示:

<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
    <li>subitem1</li>    
    <li>subitem2</li>    
    <li>subitem3</li>    
</ul>
</div>
$('#subMenu').mouseenter(function() {
    $('#subMenu ul').slideDown(400);
    isInsideSubMenu = true;
}).mouseleave(function() {
    $('#subMenu ul').hide(400);
});
在设置菜单动画之前,您可能需要使用某种形式的
。停止(true,true)
,否则在菜单上快速来回移动光标将导致动画“堆叠”,用户只会感到陌生。请参阅此处的讨论:

所以看起来是这样的:

$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).mouseleave(function() {
    $('#subMenu').hide(400);
});
​

将菜单和子菜单放在同一个容器中总是很好的,这样在导航子菜单时就不需要单独的鼠标处理程序

HTML:

<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
    <li>subitem1</li>    
    <li>subitem2</li>    
    <li>subitem3</li>    
</ul>
</div>
$('#subMenu').mouseenter(function() {
    $('#subMenu ul').slideDown(400);
    isInsideSubMenu = true;
}).mouseleave(function() {
    $('#subMenu ul').hide(400);
});
CSS:

#subMenu ul { display:none;}

将菜单和子菜单放在同一个容器中总是很好的,这样在导航子菜单时就不需要单独的鼠标处理程序

HTML:

<div id="subMenu">
<div id="menuItem">Item1</div>
<ul>
    <li>subitem1</li>    
    <li>subitem2</li>    
    <li>subitem3</li>    
</ul>
</div>
$('#subMenu').mouseenter(function() {
    $('#subMenu ul').slideDown(400);
    isInsideSubMenu = true;
}).mouseleave(function() {
    $('#subMenu ul').hide(400);
});
CSS:

#subMenu ul { display:none;}

假设您希望保持完全相同的html结构,可以使用以下代码:

$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).next('#subMenu').mouseleave(function() {
    $('#subMenu').hide(400);
});

请注意,我已经告诉jQuery仅当鼠标离开
#子菜单时才隐藏
#子菜单

如果希望保持完全相同的html结构,则可以使用以下代码:

$('#menuItem').mouseenter(function() {
    $('#subMenu').slideDown(400);
}).next('#subMenu').mouseleave(function() {
    $('#subMenu').hide(400);
});

请注意,我已经告诉jQuery只有当鼠标离开
#子菜单时才隐藏
#子菜单

不是你问题的答案,而是jQuery手风琴。你考虑过jQuery手风琴吗?不是完整的答案,但我认为它会帮助你。你可能想查看hoverIntent jQuery插件。对于就像你描述的那样,当你隐藏菜单之类的东西时,它会让用户在将鼠标移出某个区域时有一定的灵活性,并使其更加友好。我的菜单必须像JSFIDLE示例中那样进行切片。我想知道一种我解释过的隐藏方法。我不明白你所说的切片是什么意思。html结构必须保持那样吗是吗?不是你问题的答案,但是Jquery手风琴你考虑过Jquery手风琴吗?不是一个完整的答案,但我认为它会帮助你。你可能想看看hoverIntent Jquery插件。对于像你描述的情况,当你隐藏一些东西,比如菜单,使其更加用户友好。我的菜单必须像JSFIDLE示例中那样进行切分。我想知道一种隐藏它的方法,正如我所解释的。我不明白切分的意思。html结构必须保持这种方式吗?