Espero rastrear a posição do cursor do mouse, periodicamente a cada t segundos. Então, essencialmente, quando uma página é carregada - esse rastreador deve iniciar e, a cada 100 ms, devo obter o novo valor de posX e posY e imprimi-lo no formulário.
Eu tentei o código a seguir - mas os valores não são atualizados - apenas os valores iniciais de posX e posY aparecem nas caixas de formulário. Alguma idéia de como eu posso colocar isso em funcionamento?
<html>
<head>
<title> Track Mouse </title>
<script type="text/javascript">
function mouse_position()
{
var e = window.event;
var posX = e.clientX;
var posY = e.clientY;
document.Form1.posx.value = posX;
document.Form1.posy.value = posY;
var t = setTimeout(mouse_position,100);
}
</script>
</head>
<body onload="mouse_position()">
<form name="Form1">
POSX: <input type="text" name="posx"><br>
POSY: <input type="text" name="posy"><br>
</form>
</body>
</html>
javascript
Hari
fonte
fonte
event
objeto quando a função for chamada pela segunda vez. Você provavelmente deve ouvir algum evento do que usarsetTimeout
.window.event
seráundefined
ounull
. Se não houver evento, não háevent
objeto.Respostas:
A posição do mouse é relatada no
event
objeto recebido por um manipulador para omousemove
evento, que você pode anexar à janela (as bolhas de eventos):(Observe que o corpo disso
if
será executado apenas no IE antigo.)Exemplo do acima em ação - ele desenha pontos à medida que você arrasta o mouse sobre a página. (Testado no IE8, IE11, Firefox 30, Chrome 38.)
Se você realmente precisa de uma solução baseada em timer, combine isso com algumas variáveis de estado:
Tanto quanto sei, você não pode obter a posição do mouse sem ter visto um evento, algo que esta resposta a outra pergunta do Stack Overflow parece confirmar.
Nota : Se você fizer algo a cada 100 ms (10 vezes / segundo), tente manter o processamento real que você faz nessa função muito, muito limitado . Isso dá muito trabalho para o navegador, principalmente os mais antigos da Microsoft. Sim, em computadores modernos, isso não parece muito, mas há muita coisa acontecendo nos navegadores ... Por exemplo, você pode acompanhar a última posição processada e resgatar o manipulador imediatamente se a posição não tiver ' t mudou.
fonte
Aqui está uma solução, baseada no jQuery e em um ouvinte de evento do mouse (que é muito melhor do que uma pesquisa regular) no corpo:
fonte
Abra seu console ( Ctrl+ Shift+ J), copie e cole o código acima e mova o mouse na janela do navegador.
fonte
Eu acredito que estamos pensando demais nisso,
fonte
document.body.addEventListener("mousemove", function (e) {})
é a maneira de fazer isso, em seu código javascript ao invés de no htmlO que eu acho que ele só quer saber as posições X / Y do cursor do que por que a resposta é tão complicada.
fonte
Código baseado no ES6:
Se você precisar de limitação para mover o mouse, use o seguinte:
aqui está um exemplo
fonte
Independentemente do navegador, as linhas abaixo trabalharam para eu buscar a posição correta do mouse.
event.clientX - event.currentTarget.getBoundingClientRect().left event.clientY - event.currentTarget.getBoundingClientRect().top
fonte
Se você quiser apenas acompanhar o movimento do mouse visualmente:
fonte
Não tenho reputação suficiente para postar uma resposta a um comentário, mas peguei a excelente resposta de TJ Crowder e defini completamente o código em um temporizador de 100 ms . (Ele deixou alguns detalhes para a imaginação.)
Obrigado OP pela pergunta e TJ pela resposta! Vocês dois são uma grande ajuda. O código é incorporado abaixo como um espelho de isbin.
fonte
Aqui está uma combinação dos dois requisitos: rastreie a posição do mouse, a cada 100 milissegundos:
Isso rastreia e age na posição do mouse, mas apenas a cada período de milissegundos.
fonte
Apenas uma versão simplificada das respostas de @TJ Crowder e @RegarBoy .
Menos é mais na minha opinião.
Confira o evento onmousemove para obter mais informações sobre o evento.
Há um novo valor de
posX
eposY
toda vez que o mouse se move de acordo com as coordenadas horizontal e vertical.fonte