2015-10-08 6 views
1

Как функция, которая запускается другой функцией, получает положение мыши? Вот мой код: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); 
} 

Это делается для отображения координат при нажатии. Мне нужно отображать их каждые 100 мс, если isMouseDown == true.

Благодаря

+2

что вы хотите достичь? –

+1

Возможно, вы захотите использовать обработчик события mousemove и внутри этой проверки, если кнопка нажата также ... – CBroe

+1

Но почему «не может запускать сам себя»? – cybersoft

ответ

4

Там нет никакого способа в Javascript для случайной функции Javascript, чтобы получить позицию мыши. Текущая позиция мыши появляется только из объекта события для события, связанного с мышью. Итак, если вы хотите отслеживать положение мыши, вы можете зарегистрировать обработчик событий для события mousemove и для mousedown и mouseup, чтобы отслеживать состояние кнопки.

Если вы хотите отобразить положение мыши, когда-либо 100 мс, вы можете установить таймер так, чтобы он отображался только часто, но вам нужно будет отслеживать текущую позицию мыши в обработчике события mousemove.

Вот простой пример кода:

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>

+0

Пожалуйста, удалите часть «Demo coming in bit ...», тогда этот ответ будет хорош :-) – Neal

+0

Вот для чего нужны комментарии. Это плохая форма, чтобы сделать это в ответ. Я могу, вероятно, процитировать вас о металах. – Neal

+0

Рабочая демонстрация добавлена. – jfriend00

0

Это немного нечеткая, что вы пытаетесь достичь, однако вы не собираетесь, чтобы получить периодическое событие, если вы используете setTimeout(). Похоже, вы ищете setInterval(). Смотрите пример ниже:

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; 
 
    } 
 
    }
<div id="myElement"></div>

+1

вы хотите запустить функцию при переходе в setTimeout? – dandavis

+0

Что такое 'isMouseDown'? – caasjj

+0

Переменная, указанная в его сообщении ... Я не заявлял об этом в этом примере. –

Смежные вопросы