gpt4 book ai didi

javascript 的 onmousemove/event.clientX 正在运行但会抛出错误

转载 作者:行者123 更新时间:2023-11-30 08:59:42 24 4
gpt4 key购买 nike

当我意识到它在 chrome 控制台中引发了数千个错误时,我只是将这个鼠标跟踪小示例放在一起。

Uncaught TypeError: Cannot read property 'clientX' of undefined

据我所知,这意味着 chrome 无法找到该属性所属的对象。但是如果我打开这个例子,它会显示正确的坐标。请帮助我摆脱这些无用的错误。

<html>
<head>
<style type="text/css">
#tracking {
width: 300px;
height: 300px;
background-size: 300px 300px;
background-color: #00F;
left: 100px;
top: 100px;
position: absolute;
}
</style>
<script type="text/javascript">
var mX, mY;
var track;
document.onmousemove = update;

function trackload()
{
track = document.getElementById("tracking");
setTimeout("update()",10);
}

function update(e)
{
mX = e.clientX;
mY = e.clientY;
if (track) {
track.innerHTML = "X: " + mX + " Y: " + mY + " deg: " + (Math.atan(mY / mX) * (180/Math.PI));
track.style.cssText = "-webkit-transform: rotate(" + (Math.atan(mY / mX) * (180/Math.PI)) + "deg);";}
setTimeout("update()",10);
}
</script>
</head>
<body>
<div id="tracking" onclick="trackload()"></div>
</body>

最佳答案

删除对 setTimeout 的调用以防止错误。这是因为 update 函数需要一个事件对象,当您通过 setTimeout 调用该函数时,该对象不会传入。因此 e 是未定义的,你会得到你的错误。

这是一个 working example .

如果 setTimeout 调用有充分的理由,您将需要对其进行解释,因为乍一看我无法理解为什么需要它们。作为旁注,将字符串传递给 setTimeout 通常被认为是不好的做法(它是 eval 的别名)。您可以只传递对函数的引用。

关于javascript 的 onmousemove/event.clientX 正在运行但会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286622/

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