Pergunta

Eu tenho uma função em javascript que move um div dependendo da posição do mouse. Esta função é definida em uma função setInterval () e executado a cada segundo. Eu preciso para capturar a posição do mouse assim:

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

window.onload = function() {
  setInterval("mousemov()",1000);
}

Ps:. Eu não posso usar o evento mousemove porque a função deve ser executada mesmo que o mouse está parado

Obrigado por ajuda!

Foi útil?

Solução

A única vez que você pode acessar o objeto de evento é durante a execução de um manipulador de eventos. Então o que você precisa fazer é criar um evento OnMouseMove sobre o documento e armazenar as coordenadas do mouse em um objeto globalmente acessível. Você pode acessar esses valores de qualquer outro lugar em seu script para determinar a posição do mouse.

Aqui está um exemplo (você não estiver usando jQuery, por isso este é o código DOM reta):

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);
}

Eu deveria fazer a nota que clientX e clientY não tome rolagem em conta. Você vai precisar para recuperar os deslocamentos de rolagem e aplicá-los para os valores devolvidos.

Outras dicas

Bem, se você ouvir o movimento do mouse para o documento e salvar a sua localização e, em seguida, sempre que você quer, por exemplo, cada segundo no seu caso, você tem a última posição registrada mouse.

este é um exemplo jQuery

$(document).ready(function()
 {
  $().mousemove(function(e)
   {
       window.mouseX = e.pageX;
       window.mouseY = e.pageY;
  });
});

e sua função mousemove seria

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top