2009-10-22 21 views
6

Mam funkcję w javascript, która przenosi jeden div w zależności od pozycji myszy. Ta funkcja jest ustawiana na funkcji setInterval() i wykonywana co sekundę. Muszę zdobyć pozycję myszy tak:Przechwytywanie pozycji myszy na setInterval() w JavaScript

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

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

Ps: Nie mogę używać mouseMove zdarzenie, ponieważ funkcja ta musi być wykonywana nawet gdy mysz jest zatrzymany.

Dzięki za pomoc!

+1

Dlaczego nie używać zdarzenia mousemove? Naprawdę nie chcesz zmieniać współrzędnych "div", jeśli mysz się nie porusza. Zaktualizuj współrzędne tylko po przesunięciu kursorem myszy. –

+1

Jeśli mysz jest zatrzymana, nie możesz użyć poprzedniej wartości, którą otrzymałeś w zdarzeniu mouseMove? – pgb

Odpowiedz

7

Jedyny czas, który można uzyskać dostęp obiekt zdarzenia jest w trakcie realizacji programu obsługi zdarzeń. Musisz więc utworzyć zdarzenie OnMouseMove na dokumencie i zapisać współrzędne myszy w obiekcie dostępnym globalnie. Następnie można uzyskać dostęp do tych wartości z dowolnego miejsca w skrypcie, aby określić położenie myszy.

Oto przykład (nie używasz jQuery, więc jest to prosty kod DOM):

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

powinienem zrobić notatkę że clientX i clientY przewijanie nie biorą pod uwagę. Musisz pobrać przesunięcia przewijania i zastosować je do zwróconych wartości.

+3

+1. Możesz wyjaśnić, że obiekt zdarzenia nie zostanie utworzony, chyba że zrobisz zdarzenie. Więc to, co zasadniczo musi zrobić, to uchwycić zdarzenie mousemove i zapisać pozycję myszy w globalnie dostępnym miejscu, a następnie użyć tej wartości w funkcji interwału. –

+3

Ponadto, 'setInterval (" functionName() ", 1000)' nie jest dobrą praktyką (jest podobne do 'eval()'). Przejdź do 'setInterval (mousemov, 1000)' lub 'setInterval (function() {mousemove()}, 1000)' –

+1

FYI 'clientX' /' clientY' wyklucza dowolny zwój dokumentu, który może istnieć. –

1

cóż, jeśli posłuchasz przesunięcia myszy do dokumentu i zapiszesz jego lokalizację, wtedy, kiedy chcesz, np. co sekundę w Twoim przypadku masz najnowszą zarejestrowaną pozycję myszy.

to jquery przykład

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

a funkcja mousemove byłoby

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX; 
} 
Powiązane problemy