JavaScript setTimeout()无法触发自身

时间:2015-10-08 19:39:03

标签: javascript settimeout

由另一个函数触发的函数如何获得鼠标的位置?这是我的代码:

function myFunction(e){
    setTimeout(function(){
        if(isMouseDown == true){
            mouseX = e.clientX;
            mouseY = e.clientY;
            document.getElementById('myElement').innerHTML = mouseX + ' , ' + mouseY;
            myFunction(event);
        } else {}
    }, 100);
}

这样做是为了在点击时显示坐标。如果isMouseDown == true,我需要它每100毫秒显示一次。

由于

2 个答案:

答案 0 :(得分:4)

在Javascript中无法使用随机Javascript函数来获取鼠标位置。当前鼠标位置仅来自鼠标相关事件的事件对象。因此,如果要跟踪鼠标位置,则可以为mousemove事件注册事件处理程序,为mousedownmouseup注册事件处理程序以跟踪按钮状态。

如果您只想显示100毫秒的鼠标位置,那么您可以设置一个计时器,使其仅显示常用,但您需要在mousemove事件处理程序中跟踪当前鼠标位置。 / p>

这是一个简单的代码示例:



var lastMouseX = 0, lastMouseY = 0;
document.addEventListener("mousemove", function(e) {
    lastMouseX = e.clientX;
    lastMouseY = e.clientY;
});

var mouseTimer;
document.addEventListener("mousedown", function() {
    if (!mouseTimer) {
        mouseTimer = setInterval(function() {
            document.getElementById("x").innerHTML = lastMouseX;
            document.getElementById("y").innerHTML = lastMouseY;
        }, 100);
    }
});

document.addEventListener("mouseup", function() {
    clearInterval(mouseTimer);
    mouseTimer = null;
});

<div id="x"></div>
<div id="y"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您尝试实现的目标有点模糊,但如果您使用setTimeout(),则不会定期举办活动。听起来你正在寻找setInterval()。请参阅以下示例:

&#13;
&#13;
  var mouseX = 0;
  var mouseY = 0;
  var isMouseDown = true;
  document.onmousemove = function(e){
    mouseX = e.pageX;
    mouseY = e.pageY;
  }
  setInterval("myFunction()", 100);
    
  function myFunction(){
    if(isMouseDown) { 
       document.getElementById('myElement').innerHTML = mouseX + ' , ' + mouseY;
    }
  }
&#13;
<div id="myElement"></div>
&#13;
&#13;
&#13;