2016-10-11 15 views
0

я хотел бы некоторую помощь с JavaScript project.What я пытаюсь сделать, это есть две функции, которые инициируют при перемещении мыши, но только один из них работает каждый разНесколько document.onmousemove событий не работает

Например, если я это сделать

var mouseX; 
var mouseY; 

document.onmousemove = captureMouse; 
document.onmousemove = function(){console.log("check");} 
function captureMouse(ev){ 
ev = ev || window.event; 
var mousePos= mouseCoords(ev); 
mouseX=mousePos.x; 
mouseY=mousePos.y; 
document.getElementById("coordinput").value=mouseX; 
return mousePos;} 

function mouseCoords(ev){ 

if(ev.pageX || ev.pageY){ 

return {x:ev.pageX,y:ev.pageY}; 


} 

return{ 
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, 
y:ev.clientY + document.body.scrollTop - document.body.clientTop 
}; 

} 

Если я удалить второй document.onmousemove, первый работает отлично и изменяет значение поля ввода

Если я оставил его там, он постоянно пишет чек как это должно (это для целей отладки), но первый один не работает

Любые идеи о том, как сделать несколько событий мыши, работают?

+1

Как Javascript последовательна, поэтому только последняя функция, назначенная событие будет называться. Чтобы проверить вторую функциональную функцию() {console.log ("check");}, вы можете использовать ее внутри первой функции captureMouse; – Pranay

+0

Хорошо спасибо за этот ответ. Я думал, что каждый document.onmousemove добавляет какой-то флаг, поэтому, когда вы перемещаете мышь, он выполняет как не только последнюю. Проблема в том, что я намерен использовать другую функцию вместо консоли .log, поэтому мне действительно нужно, чтобы они были разделены, и capturemouse только там, чтобы постоянно обновлять две координаты – rexxar2

ответ

1

использование document.addEventListener('mousemove', yourCb); позволяет несколько обработчиков

+0

, это действительно работает. Если это не проблема, не могли бы вы объяснить, почему это работает, но мой код не работает? Я думаю, document.onmousemove работает как установка onmousemove() в элементе html, так что я в основном перезаписываю его? – rexxar2

+0

, потому что smth.onmousemove - обратный вызов, и вы перезаписываете его каждый раз. addEventListener просто использует smth-подобный массив обратных вызовов внутри. –

+0

большое спасибо – rexxar2

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

  • Нет связанных вопросов^_^