2009-03-04 21 views
15

Ich kann die Cursorposition finden. Aber ich muss herausfinden, ob die Maus stabil ist. Wenn die Maus länger als 1 Minute nicht bewegt wurde, müssen wir den Benutzer warnen.Erkennen, wenn sich die Maus nicht bewegt

Wie ist es möglich, gibt es spezielle Ereignisse dafür? (Nur für IE in Javascript)

Antwort

36

Set ein Timeout, wenn die Maus 1 Minute in die Zukunft verschoben wird, und wenn die Maus bewegt wird, deaktivieren Sie das Timeout:

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

Ich sehe ein mögliches Problem: Jeder Aufruf zu SetTimeout gibt eine Zahl für eine Zähler.Wann wird es umhauen und was passiert dann? Ich schlage statt dessen einen setInterval (update, 1000) vor, wobei 'update' eine Variable inkrementiert, die das onmousemove-Ereignis zurücksetzt. Wenn die Variable in Update über 60 kommt, alarmiert Benutzer – some

+2

Ein Kopf hoch, das funktioniert nicht mehr in Chrome – Jay

+2

@Jay funktioniert für mich –

1

Gibt es keine Möglichkeit, einen Timer nach jedem Mausbewegungsereignis inkrementieren zu lassen?

Wenn es zu einer Minute kommt, dann öffne das Nachrichtenfeld, aber jedes Mal, wenn die Maus bewegt wird, wird der Timer zurückgesetzt.

0

können Sie die onmousemove Ereignis verwenden. Darin, clearTimeout() und setTimeout (your_warning, 1 Minute).

0

Sie könnten this script/snippet verwenden, um die Mauszeigerposition zu erkennen und sich daran zu erinnern. Verwenden Sie dann einen Timer "setTimeout (...)", um die Position zu überprüfen, sagen wir jede Sekunde und erinnern Sie sich an diese Zeit.

Wenn mehr als eine Minute verstrichen ist und sich die Position nicht geändert hat, können Sie den Benutzer warnen.

1

Ja, Sie haben eine onmousemove Veranstaltung in Javascript, so zu erreichen, was Sie müssen nur etwas Code wie folgt tun:

Sie können es zum Beispiel auf dem Dokumentkörper-Tag verwenden.

UPDATE: @Marius hat ein besseres Beispiel als dieses erreicht.

0

Hier ist eine one-and-done-Funktion, die jedes Element für die Bewegung überprüfen:

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

Verbrauch: mouse(element, delay, callback)

Beispiele: einen Video-Player verstecken Make die Maus nach 5 Sekunden im Leerlauf und Vollbild

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-Raum AFK (45 Sekunden) (vorausgesetzt, Sie eine Chat-Box und eine Nachrichtensendefunktion):

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