如何延迟jquery悬停事件
how to delay a jquery hover event
我试图延迟jquery悬停事件。下面的代码是我正在使用的代码。
$(document).ready(function(){
$('ul.tabs li').hover(function(){
var tab_id = $(this).attr('data-tab');
$('ul.tabs li').removeClass('current');
$('.tab-content').removeClass('current');
$(this).addClass('current');
$("#"+tab_id).addClass('current');
})
})
我已经尝试将其更改为以下代码,但无济于事。
var delay=1000, setTimeoutConst;
$('ul.tabs li').on('hover', function() {
setTimeoutConst = setTimeout(function(){
var tab_id = $(this).attr('data-tab');
$('ul.tabs li').removeClass('current');
$('.tab-content').removeClass('current');
$(this).addClass('current');
$("#"+tab_id).addClass('current');
}, delay);
}, function(){
clearTimeout(setTimeoutConst );
});
这是我的HTML代码
<div class="container">
<ul class="tabs">
<li class="tab-link current" data-tab="tab-1">Tab One</li>
<li class="tab-link" data-tab="tab-2">Tab Two</li>
<li class="tab-link" data-tab="tab-3">Tab Three</li>
<li class="tab-link" data-tab="tab-4">Tab Four</li>
</ul>
<div id="tab-1" class="tab-content current">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
<div id="tab-2" class="tab-content">
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div id="tab-3" class="tab-content">
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
</div>
<div id="tab-4" class="tab-content">
Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
我仍然是jquery的初学者,所以我不知道该怎么做。一些帮助是有益的。由于
使用on('hover')
是一个坏主意,相反,您应该使用.hover()
或on('mouseenter')
和on('mouseleave')
。
下面的代码为我工作,请注意,您不能在超时函数中使用this
,将id存储到变量中可以解决这个问题。
我假设你想取消超时,如果鼠标离开之前的延迟已经过期,这就是为什么我在mouseleave
上删除超时。
var delay=1000, setTimeoutConst;
var tab_id, tab_id_this;
$(document).on("mouseenter", "ul.tabs li", function() {
console.log("MOUSEENTER");
tab_id = $(this).attr('data-tab');
tab_id_this = $(this).attr('id');
setTimeoutConst = setTimeout(function(){
//Do whatever you like here
//your code would be approximate like this:
$('ul.tabs li').removeClass('current');
$('.tab-content').removeClass('current');
$("#"+tab_id_this).addClass('current');
$("#"+tab_id).addClass('current');
}, delay);
});
$(document).on("mouseleave", "ul.tabs li", function() {
clearTimeout(setTimeoutConst );
});
on('hover')
是一个坏主意,因为:
在jQuery 1.8中已弃用,在1.9中删除:名称"hover"用作字符串"mouseenter mouseleave"的简写。它附着一个这两个事件的事件处理程序,处理程序必须检查事件。键入以确定事件是mouseenter还是mouselleave。不要将"hover"伪事件名称与.hover()方法混淆,它接受一个或两个函数。
看到文档。
我将使用$. hoverdelay()插件来做到这一点。它允许您配置'in'和'out'事件的延迟,如下所示:
$('ul.tabs li').hoverDelay({
delayIn: 200,
delayOut:700,
handlerIn: function($element){
$element.css({backgroundColor: 'red'});
},
handlerOut: function($element){
$element.css({backgroundColor: 'auto'});
}
});
相关文章:
- jQuery悬停在没有鼠标悬停的情况下启动
- 为什么jquery悬停在jsfiddle中可以工作,而在我的html布局中却不能
- jquery悬停和while循环
- 添加一个setTimeout方法会使jQuery悬停方法忽略setTimeout方法中的函数
- jQuery悬停动画只在其他类似元素中的一个元素上
- 为什么jQuery悬停方法在这种情况下不起作用
- Jquery悬停选择不起作用
- Jquery 悬停事件卡在克隆元素上
- Jquery 悬停函数在将鼠标悬停在选择框上时会失败
- Jquery悬停功能显示和隐藏元素
- Jquery 悬停以显示图像
- JQuery:悬停时文本颜色切换
- jQuery悬停滚动,只需要一点帮助
- 当加载带有hastags的动态内容-URI时,Jquery-悬停效果不起作用
- 如何防止jquery悬停效果在悬停时和悬停时激活
- 使用jQuery悬停时出现重复图像
- jQuery悬停越界
- jQuery悬停淡出p个标签,再淡出另一个标签
- Jquery悬停函数- 如何使其变得简单
- jquery悬停在图像上不起作用