在Javascript中捕获setInterval()上的鼠标位置

riz*_*oro 7 javascript javascript-events mouseevent

我有一个javascript函数,根据鼠标位置移动一个div.此函数在setInterval()函数上设置并每秒执行一次.我需要像这样捕获鼠标位置:

function mousemov() {
  document.getElementById("myDiv").style.left = Event.clientX; //don't work
}

window.onload = function() {
  setInterval("mousemov()",1000);
}
Run Code Online (Sandbox Code Playgroud)

Ps:我无法使用mousemove事件,因为即使鼠标停止也必须执行该功能.

谢谢你的帮助!

Jon*_*cto 8

您可以访问事件对象的唯一时间是在执行事件处理程序期间.因此,您需要做的是在文档上创建OnMouseMove事件,并将鼠标坐标存储在全局可访问的对象中.然后,您可以从脚本中的任何其他位置访问这些值,以确定鼠标位置.

这是一个例子(你没有使用jQuery,所以这是直接的DOM代码):

document.onmousemove = function(e) {
    var event = e || window.event;
    window.mouseX = event.clientX;
    window.mouseY = event.clientY;
}

function mousemov() {
    document.getElementById("myDiv").style.left = window.mouseX;
}

window.onload = function() {
    setInterval(mousemov, 1000);
}
Run Code Online (Sandbox Code Playgroud)

我应该注意clientX和clientY不考虑滚动.您需要检索滚动偏移并将它们应用于返回的值.

  • +1.您可能想要解释除非捕获事件,否则不会创建事件对象.因此,他基本上需要做的是捕获mousemove事件并将鼠标位置存储在全局可访问的位置,然后在interval函数中使用该值. (3认同)
  • 另外,`setInterval("functionName()",1000)`不是一个好习惯(它类似于`eval()`).去找'setInterval(mousemov,1000)`或`setInterval(function(){mousemove()},1000)` (3认同)