2016-08-03 10 views
1

Wenn ich die mittlere Maustaste drücke, erscheint nach einer Sekunde "nach 1 Sekunde" in der Konsole. Es ist in Ordnung, es ist was ich brauche. Aber ich möchte auch 1 Sekunde Verzögerung stoppen, wenn ich die mittlere Maustaste loslasse (Mouse Up Listener). Aber jetzt, während die 'wait' Funktion ausgeführt wird, wird 'mouseup' Listener natürlich die 'delay' Variable nicht in 'false' ändern (erst nachdem 1 Sek. Vergangen ist). Aber mb kann ich es irgendwie machen? (Zu stoppen 'wait' Funktion, zB wenn er 0,5 sec auf mouseup mittlere Taste verzögert, nicht mehr als 1 sec)Stopp/Interrupt-Funktionsausführung, die mit getTime funktioniert

function wait(ms){ 
    var start = new Date().getTime(); 
    var end = start; 
    while((end < start + ms) && delay == true) { 
    end = new Date().getTime(); 
    } 
} 

var delay = false; 

document.addEventListener("mousedown", function(e) { 
    if (e.button == 1) { // 1 - middle mouse button 
     delay = true; 
     wait(1000); // delay 1 sec 
     console.log("after 1 sec"); 
    } 
}); 

document.addEventListener("mouseup", function(e) { 
    if (e.button == 1) { 
     delay = false; 
    } 
}); 

Update: Ich werde console.log("after 1 sec"); mit document.execCommand("copy"); ersetzen, können wir verzögern Kopie Zwischenablage maximal 1 Sekunde lang in Chrome-Browser setTimeout() func, aber es wird mit setTimeout(), aber wait(999); document.execCommand('copy'); Werken für Firefox (999 ms maximal zulässige)

Antwort

1

Ihr Problem in Firefox nicht funktioniert ist, dass die mousedown- Listener-Funktion der weitere Ausführung blockiert bis es fertig ist. Ihre Wartefunktion implementiert so genanntes "busy waiting". Sie sollten setTimeout() verwenden, mit dem Sie eine Funktion asynchron nach einer bestimmten Zeit ausführen können. Sie erhalten einen Handle von setTimeout() zurück, mit dem Sie das Zeitlimit abbrechen können, wenn Sie die Maustaste loslassen. Weitere Informationen finden Sie unter https://developer.mozilla.org/en/docs/Web/API/WindowTimers/setTimeout.

+0

Ich hätte dann erwähnen sollen, was ich wirklich will. Ich ersetze 'console.log (" nach 1 sek ");' mit 'document.execommand (" copy ");', Wir können die Kopie maximal 1 Sekunde lang im Chrome-Browser mit 'setTimeout() in die Zwischenablage verschieben. 'func, aber es funktioniert nicht in Firefox mit' setTimeout() ', aber' wait (999); document.execommand ('copy'); 'funktioniert für Firefox (maximal 999 ms). – user25

+0

Dann gibt es keine Lösung für Sie, wenn Sie die Zwischenablage nicht von setTimeout() kopieren können. Bei einer langen Wartezeit wird Ihr mouseup-Ereignis immer blockiert. –

Verwandte Themen