Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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/8/linq/3.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 Jquery鼠标移动延迟_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript Jquery鼠标移动延迟

Javascript Jquery鼠标移动延迟,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,有一个简单的问题,看起来HoverIntent无法解决 我有2个元素(比如一个按钮和一个div),1个元素是启动div扩展的触发器,它由mouseenter事件触发(这将是HoverIntent的合适候选) 但是,当鼠标离开扩展的div一段时间后,我需要它再次收缩,但是如果他们重新输入div,它就不应该收缩。大多数hoverintent样式的插件都会给我这个功能,但只针对一个元素,一个元素控制扩展(button-mouseenter),一个元素控制收缩(div-mouseleave) 我知道我可

有一个简单的问题,看起来HoverIntent无法解决

我有2个元素(比如一个按钮和一个div),1个元素是启动div扩展的触发器,它由mouseenter事件触发(这将是HoverIntent的合适候选)

但是,当鼠标离开扩展的div一段时间后,我需要它再次收缩,但是如果他们重新输入div,它就不应该收缩。大多数hoverintent样式的插件都会给我这个功能,但只针对一个元素,一个元素控制扩展(button-mouseenter),一个元素控制收缩(div-mouseleave)

我知道我可以编写一些代码,只需执行setTimeout来延迟一段时间,并确保鼠标仍在该区域之外,但如果存在的话,我宁愿使用预先制作的插件

那么,有人能告诉我这是否存在吗

--编辑--


编辑了上述问题,以明确其主要意图是,如果鼠标在给定的时间内(比如说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了!