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 });
});
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
Ein Kopf hoch, das funktioniert nicht mehr in Chrome – Jay
@Jay funktioniert für mich –