JQuery超时问题与mouseout函数
JQuery timeout issue with mouseout function
我有一个问题与JQuery mouseout
函数和setTimeout
。
我想要实现的是,当我悬停一个元素时,它会改变背景。当我离开该元素时(因此触发了mouseout),背景应该在1秒后恢复到原始状态。
如果我使用下面的代码,goBack
函数只在我离开该元素时被调用:
.mouseover(function(){
changeBackground();
})
.mouseout(function(){
//setTimeout(function() {
goBack();
//}, 1000);
});
但是如果我取消超时函数的注释(这就是我想要实现的),即使我不离开该元素,也会调用goBack
函数。
这是因为事件冒泡所以使用mouseenter和mouselleave而不是mouseover和mouseout或者使用hover,比如
.hover(function(){
changeBackground();
},function(){
setTimeout(function() {
goBack();
}, 1000);
});
或
.mouseenter(function(){
changeBackground();
})
.mouseleave(function(){
setTimeout(function() {
goBack();
}, 1000);
});
从jQuery.mouseenter
的文档,
mouseenter
事件的处理方式与mouseover
不同事件冒泡。如果在本例中使用了mouseover
,那么当将鼠标指针移动到Inner元素上,则处理程序将为触发。这通常是不受欢迎的行为。另一方面,mouseenter
事件仅在鼠标进入其绑定的元素时触发其处理程序,而不是进入后代元素。因此,在本例中,当鼠标进入Outer元素时触发处理程序,而不是进入Inner元素。
更新,这里有超时的问题,你需要清除超时,这是在改变背景的鼠标输入,如
function changeBackground() {
$('#content').addClass('yellow');
}
function goBack() {
$('#content').removeClass('yellow');
}
var t=null;//clear timeout variable
$(function() {
$('#content').mouseenter(function() {
clearTimeout(t);// clear previous timeouts
changeBackground();
}).mouseleave(function() {
t=setTimeout(function() { //set new timeouts
goBack();
}, 1000);
});
});
#content {
background-color: #eee;
padding: 20px;
cursor: pointer;
}
.yellow {
background-color: #ffff00 !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content">
Lorem ipsum doner inut
</div>
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- JavaScript 中的 mouseout kill 函数
- 我想更改图像'的mouseover和mouseout效果取决于调用了哪个函数
- JQuery超时问题与mouseout函数
- Mouseout函数正在被调用,而我'm仍然悬停在我的mouseover对象
- 更改'单击'函数来mouseover/mouseout
- jQuery闭包和事件函数(mouseover, mouseout,…)