一个函数,用于检查鼠标是否仍在每 10 毫秒悬停一个元素(如果是,则运行一个函数)
A Function to Check if the Mouse is Still Hovering an Element Every 10 Milliseconds (and run a function if it is)
我想知道在悬停元素(例如div class="myiv")并每X毫秒检查一次是否仍然悬停后是否要运行一个函数,如果是,则运行另一个函数。
编辑:这为我做了诀窍:http://jsfiddle.net/z8yaB/
对于简单界面中的大多数目的,您可以使用jquery的悬停函数,如果鼠标悬停,则只需将鼠标存储在布尔值中的某个地方。然后,您可以使用一个简单的setInterval
循环来检查每个毫秒的此状态。您仍然可以在第一条评论中看到链接副本中的此答案(编辑:现在在此处的其他答案中)。
但在某些情况下,特别是当您在悬停时有对象在鼠标和对象之间移动时会生成误报。
对于这些情况,我制作了这个函数,当 jquery 调用我的处理程序时,检查事件是否真的悬停在元素上:
var bubbling = {};
bubbling.eventIsOver = function(event, o) {
if ((!o) || o==null) return false;
var pos = o.offset();
var ex = event.pageX;
var ey = event.pageY;
if (
ex>=pos.left
&& ex<=pos.left+o.width()
&& ey>=pos.top
&& ey<=pos.top+o.height()
) {
return true;
}
return false;
};
我使用此功能来检查当我收到鼠标退出事件时鼠标是否真的离开了:
$('body').delegate(' myselector ', 'mouseenter', function(event) {
bubbling.bubbleTarget = $(this);
// store somewhere that the mouse is in the object
}).live('mouseout', function(event) {
if (bubbling.eventIsOver(event, bubbling.bubbleTarget)) return;
// store somewhere that the mouse leaved the object
});
您可以使用
variablename = setInterval(...)
在鼠标悬停时重复启动函数,clearInterval(variablename)
在鼠标悬停时停止它。
http://jsfiddle.net/XE8sK/
var marker;
$('#test').on('mouseover', function() {
marker = setInterval(function() {
$('#siren').show().fadeOut('slow');
}, 500);
}).on('mouseout', function() {
clearInterval(marker);
});
jQuery 有 hover() 方法,它为你提供了开箱即用的功能:
$('.myiv').hover(
function () {
// the element is hovered over... do stuff
},
function () {
// the element is no longer hovered... do stuff
}
);
要每 x 毫秒检查一次元素是否仍悬停并响应,请调整以下内容:
var x = 10; // number of milliseconds
var intervalId;
$('.myiv').hover(
function () {
// the element is hovered over... do stuff
intervalId = window.setInterval(someFunction, x);
},
function () {
// the element is no longer hovered... do stuff
window.clearInterval(intervalId);
}
);
演示 - http://jsfiddle.net/z8yaB/
var interval = 0;
$('.myiv').hover(
function () {
interval = setInterval(function(){
console.log('still hovering');
},1000);
},
function () {
clearInterval(interval);
}
);
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟