jQuery:使子菜单在一段时间后出现和消失
jQuery: Make submenu appear and disappear after a period of time
我正在尝试制作一个子菜单,该子菜单会在一段时间后出现。如果它已经打开,我希望其他菜单在悬停时立即弹出。但是,在鼠标离开时,它应该保持打开状态一小段时间,因为用户可能会意外地将鼠标移动到子div 之外。
好吧,问题是如果您不小心悬停它,它甚至会打开(在设定的时间之后(。这不应该发生。
这是我的代码:
var timer = false;
$('li.mega-menu-dropdown').hover(function(e){
var el = this;
if ($("li.mega-menu-dropdown.open").length == 0)
{
setTimeout(function() {
openMenu(el);
}, 1000);
} else {
clearTimeout(timer);
openMenu(el);
}
},
function(){
timer = setTimeout(function(){
$('li.mega-menu-dropdown').removeClass('open');
},300);
});
function openMenu(el) {
$('li.mega-menu-dropdown').removeClass('open');
$(el).toggleClass("open");
}
这是我的jsfiddle:http://jsfiddle.net/bsnubner/
编辑:
只需悬停它,用鼠标停留在那里,它就会按预期工作。但是,然后尝试将鼠标移到"悬停菜单"链接上并立即离开它。您会看到它会自动打开子菜单,即使您不再在菜单中。更糟糕的是:您必须再次进入菜单内外才能关闭它。
问题是,在悬停时,它会通过函数调用设置超时。这将在设定的时间后执行函数 - 即使您不再在菜单中。但是我该如何防止它呢?
如果您能带领我走上正确的道路,我将不胜感激。
好的,如果您没有更好的解决方案,我的解决方案如下:
我只是简单地补充说:
var startTimer = false;
如果用户不小心悬停了菜单链接,则杀死计时器。
http://www.jsfiddle.net/bsnubner/4
如果用户将鼠标悬停在"悬停菜单"上,它将在超时后弹出。如果他随后将鼠标悬停在"悬停菜单 2"并且另一个子菜单仍然打开,它将立即打开第二个子菜单,而不会延迟。如果用户不小心将一个菜单链接悬停在短时间内,它将不会打开其子菜单。在鼠标离开一段时间后,它会按预期关闭:)
相关文章:
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 收集一段时间内的EMG数据.建议JS
- 在一段时间内切换文本
- 如何停止字幕文本一段时间,然后继续
- HTTP服务器在一段时间后停止(Node.js)
- Hammer.js过了一段时间就停止工作了
- Meteor-在一段时间内解锁模板(按日期)
- 画布在一段时间后开始滞后
- JS-在一段时间后水平移动图像
- AJAX 调用在获得响应并成功执行时会冻结浏览器一段时间
- 表单提交在一段时间循环PHP,jquery
- 一段时间后生成回发
- 一段时间后自动点击提交按钮
- 如何每隔一段时间更改我网站的背景颜色
- 一段时间后调用函数,但只调用一次
- 一段时间后使用Javascript加载网页ASP.net
- 在for循环中另一个音频结束后播放一段时间的音频
- jQuery:使子菜单在一段时间后出现和消失
- 消息在一段时间后消失
- 使用jQuery覆盖内联CSS应用了一段时间,然后就消失了.为什么