gpt4 book ai didi

Javascript - 跟踪鼠标位置

转载 作者:IT王子 更新时间:2023-10-29 02:37:53 27 4
gpt4 key购买 nike

我希望每隔 t 毫秒定期跟踪鼠标光标的位置。所以基本上,当页面加载时 - 这个跟踪器应该启动并且(比如)每 100 毫秒,我应该获取 posX 和 posY 的新值并将其打印在表单中。

我尝试了以下代码 - 但值没有得到刷新 - 只有 posX 和 posY 的初始值显示在表单框中。关于如何启动和运行它的任何想法?

<html>
<head>
<title> Track Mouse </title>
<script type="text/javascript">
function mouse_position()
{
var e = window.event;

var posX = e.clientX;
var posY = e.clientY;

document.Form1.posx.value = posX;
document.Form1.posy.value = posY;

var t = setTimeout(mouse_position,100);

}
</script>

</head>

<body onload="mouse_position()">
<form name="Form1">
POSX: <input type="text" name="posx"><br>
POSY: <input type="text" name="posy"><br>
</form>
</body>
</html>

最佳答案

鼠标的位置在 mousemove 事件的处理程序接收到的 event 对象上报告,您可以将其附加到窗口(事件气泡):

(function() {
document.onmousemove = handleMouseMove;
function handleMouseMove(event) {
var eventDoc, doc, body;

event = event || window.event; // IE-ism

// If pageX/Y aren't available and clientX/Y are,
// calculate pageX/Y - logic taken from jQuery.
// (This is to support old IE)
if (event.pageX == null && event.clientX != null) {
eventDoc = (event.target && event.target.ownerDocument) || document;
doc = eventDoc.documentElement;
body = eventDoc.body;

event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0 );
}

// Use event.pageX / event.pageY here
}
})();

(请注意,if 的主体将仅在旧 IE 上运行。)

Example of the above in action - 当您将鼠标拖到页面上时,它会绘制点。 (在 IE8、IE11、Firefox 30、Chrome 38 上测试。)

如果你真的需要一个基于计时器的解决方案,你可以将它与一些状态变量结合起来:

(function() {
var mousePos;

document.onmousemove = handleMouseMove;
setInterval(getMousePosition, 100); // setInterval repeats every X ms

function handleMouseMove(event) {
var dot, eventDoc, doc, body, pageX, pageY;

event = event || window.event; // IE-ism

// If pageX/Y aren't available and clientX/Y are,
// calculate pageX/Y - logic taken from jQuery.
// (This is to support old IE)
if (event.pageX == null && event.clientX != null) {
eventDoc = (event.target && event.target.ownerDocument) || document;
doc = eventDoc.documentElement;
body = eventDoc.body;

event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0 );
}

mousePos = {
x: event.pageX,
y: event.pageY
};
}
function getMousePosition() {
var pos = mousePos;
if (!pos) {
// We haven't seen any movement yet
}
else {
// Use pos.x and pos.y
}
}
})();

据我所知,如果没有看到一个事件,你就无法获得鼠标位置,这 this answer to another Stack Overflow question似乎证实了。

旁注:如果您打算每 100 毫秒(10 次/秒)执行某项操作,请尽量使您在该函数中执行的实际处理非常、非常有限。这对浏览器来说是一项繁重的工作,尤其是较旧的 Microsoft 浏览器。是的,在现代计算机上它看起来并不多,但在浏览器中发生了很多事情......因此,例如,您可能会跟踪您处理的最后一个位置并在该位置没有时立即从处理程序中退出' t改变了。

关于Javascript - 跟踪鼠标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7790725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com