【发布时间】:2016-05-23 20:00:04
【问题描述】:
我用 jquery 创建了一个简单的下拉菜单
https://jsfiddle.net/pmksgz3w/
HTML
<ul>
<li>Page A</li>
<li>Page B
<ul>
<li>Dropdown</li>
<li>Dropdown</li>
</ul>
</li>
</ul>
jQuery
$(document).ready(function(){
$('ul> li').hover(function() {
$(this).find('ul').slideToggle();
});
});
当我将鼠标悬停在页面 B 上时,会显示下拉菜单。如果我将光标从页面 B 非常缓慢地向右移动(见图),那么下拉菜单将关闭,因为 li 不会在短时间内悬停。如何防止下拉菜单立即关闭?
如果我将光标极快地移动到下拉菜单,则会出现更严重的问题。因为那样的话,下拉菜单就会无限循环上滑和下滑。
我在 How to tell .hover() to wait? 找到了 2009 年的一个有前途的解决方案,但是当我尝试时答案不起作用,(编辑说明:它现在有效,请参阅下面的编辑)。进一步提到应该使用hoverIntend 插件。我下载了插件并将我的 jQuery 代码更改为
$(document).ready(function(){
$('ul> li').hoverIntend(function() {
$(this).find('ul').slideToggle();
});
});
虽然它改进了一些东西,但上面的问题是它立即关闭并且无限循环仍然存在。我该如何解决这个问题?
编辑:我设法解决了第一个问题!现在下拉菜单不会立即关闭!
https://jsfiddle.net/5sxvsu8w/
我不得不将 jQUery 代码更改如下:
$(document).ready(function(){
var timer;
$('ul> li').hover(function() {
clearTimeout(timer);
$(this).find('ul').slideDown('fast');
}, function() {
var list = $(this).find('ul');
timer= setTimeout(function() {
list.slideUp('fast');
}, 2000);
});
});
但是,无限循环问题仍然存在。
【问题讨论】:
标签: javascript jquery html css drop-down-menu