Javascript Jquery鼠标移动延迟
有一个简单的问题,看起来HoverIntent无法解决 我有2个元素(比如一个按钮和一个div),1个元素是启动div扩展的触发器,它由mouseenter事件触发(这将是HoverIntent的合适候选) 但是,当鼠标离开扩展的div一段时间后,我需要它再次收缩,但是如果他们重新输入div,它就不应该收缩。大多数hoverintent样式的插件都会给我这个功能,但只针对一个元素,一个元素控制扩展(button-mouseenter),一个元素控制收缩(div-mouseleave) 我知道我可以编写一些代码,只需执行setTimeout来延迟一段时间,并确保鼠标仍在该区域之外,但如果存在的话,我宁愿使用预先制作的插件 那么,有人能告诉我这是否存在吗 --编辑--Javascript Jquery鼠标移动延迟,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,有一个简单的问题,看起来HoverIntent无法解决 我有2个元素(比如一个按钮和一个div),1个元素是启动div扩展的触发器,它由mouseenter事件触发(这将是HoverIntent的合适候选) 但是,当鼠标离开扩展的div一段时间后,我需要它再次收缩,但是如果他们重新输入div,它就不应该收缩。大多数hoverintent样式的插件都会给我这个功能,但只针对一个元素,一个元素控制扩展(button-mouseenter),一个元素控制收缩(div-mouseleave) 我知道我可
编辑了上述问题,以明确其主要意图是,如果鼠标在给定的时间内(比如说2秒)重新进入div,则停止其收缩div。因此,div应该在mouseenter按钮上展开,然后在mousele将div移动>=2秒时收缩。不是这样的吗
$('.hover-items').each(function(idx, el){
$(el).mouseenter(function() {
$(this).slideDown(300);
$('#target_div').unbind().mouseleave(function() {$(this).slideUp(300)});
});
});
取消绑定就在那里,这样您就不会以一堆与元素关联的事件结束。只需重新设置并开始
添加以满足问题的澄清
$('.hover-items').each(function(idx, el){
$(el).mouseenter(function() {
clearTimeout($(el).data('timer'));
$('#target_div').slideDown(300)
.unbind()
.mouseleave(function() {
var closure = function(){$('#target_div').slideUp(300)};
$(el).data('timer', setTimeout(closure,2000));
});
});
});
... 警告发现输入错误!:)看起来以上只是增加了滑动的延迟,我需要它,因此如果在延迟内他们重新进入div,它将不会收缩,这可能在我的初始帖子中不清楚,因此将对其进行编辑。我已修改代码,以满足您的澄清。谢谢,这就是我目前所拥有的,但是我使用doTimeout jquery插件来管理超时。我希望有一个插件为我管理这个,因为这样做的代码有点难看(不是你的代码,只是一般需要的逻辑),对于任何需要维护它的人来说都很难理解,但是如果已经没有什么可以做的,那么这就是如何做的。关于用数据保存和删除计时器id()我完全同意扩展对象上的方法。是我用于类似问题的相同技术。但是我没有得到each()和不同的目标选择器。如果我理解@Grofit的意思,enter和leave事件应该在同一个元素上,slideDown方法应该由打开滑动元素的按钮调用。当鼠标进入滑动元件时,计时器被清除。Hwr这里的主要部分是计时器技术,那么DOM的实现就取决于@Grofit so+1了!