2009-03-04 19 views
15

Jestem w stanie znaleźć pozycję kursora. Ale muszę się dowiedzieć, czy mysz jest stabilna. Jeśli mysz nie była przesuwana dłużej niż przez 1 minutę, musimy powiadomić użytkownika.Wykrywanie kiedy mysz się nie porusza

Jak to możliwe, czy są jakieś specjalne wydarzenia? (Tylko dla IE w javascript)

Odpowiedz

36

ustawić limit czasu, gdy wskaźnik myszy zostanie przesunięty o jedną minutę w przyszłość, a jeśli mysz jest przesuwana, wyczyść timeout:

var timeout; 
document.onmousemove = function(){ 
    clearTimeout(timeout); 
    timeout = setTimeout(function(){alert("move your mouse");}, 60000); 
} 
+0

widzę potencjalny problem: Każdy wywołanie setTimeout zwraca liczbę dla licznik.Kiedy się obejrzy i co się stanie? Proponuję zamiast tego setInterval (update, 1000), gdzie 'update' zwiększa zmienną, która zostanie zresetowana przez zdarzenie onmousemove. Jeśli zmienna ma ponad 60 lat w aktualizacji, powiadom użytkownika o błędzie – some

+2

A, to już nie działa w Chrome – Jay

+2

@Jay pracuje dla mnie –

1

Czy nie ma sposobu na ustawienie timera do rozpoczęcia inkrementacji po każdym ruchu myszy?

Jeśli minie minuta, to pojawi się okno komunikatu, ale za każdym razem, gdy mysz się porusza, timer zostanie zresetowany.

0

Można użyć onmousemove wydarzenie. Wewnątrz to clearTimeout() i setTimeout (your_warning, 1 minute).

0

Można użyć this script/snippet, aby wykryć położenie wskaźnika myszy i "zapamiętać" go. Następnie użyj timera "setTimeout (...)", aby sprawdzić pozycję powiedzmy co sekundę i pamiętaj o tym czasie.

Jeśli minęła więcej niż jedna minuta, a pozycja nie uległa zmianie, możesz ostrzec użytkownika.

1

Tak, masz onmousemove zdarzenia w JavaScript, tak aby osiągnąć to, co potrzebujesz po prostu wykonać kod w ten sposób:

startTimer(); 
element.onmousemove = stopTimer(); //this stops and resets the timer 

Można na przykład użyć go na znaczniku dokumentu.

AKTUALIZACJA: @Marius osiągnął lepszy przykład niż ten.

0

Oto jeden i zrobić funkcję, która może sprawdzić każdy element na ruch:

function mouse (element, delay, callback) { 

    // Counter Object 
    element.ms = {}; 

    // Counter Value 
    element.ms.x = 0; 

    // Counter Function 
    element.ms.y = function() { 

     // Callback Trigger 
     if ((++element.ms.x) == delay) element.ms.callback(element, element.ms); 
    }; 

    // Counter Callback 
    element.ms.callback = callback; 

    // Function Toggle 
    element.ms.toggle = function (state) { 

     // Stop Loop 
     if ([0, "off"][state]) clearInterval(element.ms.z); 

     // Create Loop 
     if ([1, "on"][state]) element.ms.z = setInterval(element.ms.y, 1); 
    }; 

    // Function Disable 
    element.ms.remove = function() { 

     // Delete Counter Object 
     element.ms = null; return delete element.ms; 
    }; 

    // Function Trigger 
    element.onmousemove = function() { 

     // Reset Counter Value 
     element.ms.x = -1; 
    }; 

    // Return 
    return element.ms; 
}; 

wykorzystania: mouse(element, delay, callback)

Przykłady: Marka ukrycia odtwarzacza wideo mysz po 5 sekundach bezczynności i pełnym ekranie

let x = mouse(video, 5000, function (a) { 
    if (document.webkitIsFullScreen) video.style.cursor = "none"; 
}); 

x.toggle(1); addEventListener("mousemove", function() { 
    video.style.cursor = "auto"; 
}); 

Chat Room AFK (45 sekund) (zakładając, że masz okno czatu oraz funkcję wyślij wiadomość):

let x = mouse(chatBox, (45e3), function (a) { 
    chatBox.send({ text: chatBox.username + " is AFK.", italic: true }); 
}); 

x.toggle(1); x.addEventListener("mousemove", function() { 
    chatBox.send({ text: chatBox.username + " is no longer AFK", italic: true }); 
}); 
Powiązane problemy