确定事件外部的鼠标位置(使用jQuery)?
我需要使用(最好)jQuery获得鼠标的绝对位置/坐标(X和Y),就像在任何JavaScript事件中一样,但不在任何JavaScript事件中。谢谢。不可能。但是,您可以在教程中使用相同的方法将位置存储在全局变量中,并在事件外部读取它 像这样:确定事件外部的鼠标位置(使用jQuery)?,jquery,event-handling,mouse,position,Jquery,Event Handling,Mouse,Position,我需要使用(最好)jQuery获得鼠标的绝对位置/坐标(X和Y),就像在任何JavaScript事件中一样,但不在任何JavaScript事件中。谢谢。不可能。但是,您可以在教程中使用相同的方法将位置存储在全局变量中,并在事件外部读取它 像这样: jQuery(document).ready(function(){ $().mousemove(function(e){ window.mouseXPos = e.pageX; window.mouseYPos = e.
jQuery(document).ready(function(){
$().mousemove(function(e){
window.mouseXPos = e.pageX;
window.mouseYPos = e.pageY;
});
})
现在,您可以在任何地方使用
window.mouseXPos
和window.mouseYPos
。这是作为一个注释开始的,但我意识到它也值得作为一个答案发布:
我会小心使用文档级别,始终运行mousemove
事件,即使只轮询光标位置。这需要大量处理,可能会使任何浏览器陷入困境,尤其是像IE这样速度较慢的浏览器
这样的问题几乎肯定会引发设计决策的问题:如果不需要处理鼠标事件来轮询光标位置,那么您真的需要光标位置吗?有没有更好的方法来解决你想解决的问题
编辑:即使在Safari 4中(轻描淡写)速度非常快,这一个
mousemove
事件也会使我与教程页面的每次交互都明显地起伏不定。考虑一下这将如何影响用户对您的站点或应用程序的看法。此功能将通过每隔一段时间获取鼠标位置来减少对UI性能的影响:
function getMousePosition(timeoutMilliSeconds) {
// "one" attaches the handler to the event and removes it after it has executed once
$(document).one("mousemove", function (event) {
window.mouseXPos = event.pageX;
window.mouseYPos = event.pageY;
// set a timeout so the handler will be attached again after a little while
setTimeout(function() { getMousePosition(timeoutMilliSeconds) }, timeoutMilliseconds);
});
}
// start storing the mouse position every 100 milliseconds
getMousePosition(100);
正如在另一个答案中“您现在可以在任何地方使用window.mouseXPos
和window.mouseYPos
。”
由于在间隔期间无法检测到鼠标移动,您会失去一点准确性。我尝试了@Chetan Sastry的解决方案,但它不起作用。(我使用的是jQuery 1.6.4)。我更改代码,然后现在就开始工作。这是我的密码。我希望这会有所帮助
$(document).ready(function(){
$(document).mousemove(function(e){
window.mouseXPos = e.pageX;
window.mouseYPos = e.pageY;
});
});
这是jQuery还是JavaScript限制?@pbz这是JavaScript限制。我刚刚设置了一个jQuery.one('mousemove',function(){});为此目的。用setTimeout延迟它,下次移动时捕捉鼠标位置,瞧,你应该避免使用类似eval的结构。它们的效率较低,并且存在潜在的安全风险<代码>设置超时(函数(){getMousePosition(TimeOutMillistics)},TimeOutMillistics)代码>已验证。此更改还修复了jQuery 1.4.4中的错误。始终会生成鼠标事件。也就是说,当鼠标移动时,浏览器将计算(通过本机代码)一个鼠标事件,最多执行JS回调函数,但不包括执行JS回调函数;它是所有与鼠标相关的事件侦听器的基础。很简单,除了通过
document.onmousemove
之外,浏览器没有提供公开这些信息的一般礼貌。就我而言,这是ES5/ES6的短视。事实上,轮询鼠标位置可以简化“onmousemove”事件的反弹跳,例如当鼠标移动DOM元素时。它会自己计算,但它不会计算mousemove事件和所有依赖它的事件,除非有人订阅它。这是很有道理的。