2012-04-09 8 views
1

Ich möchte nach einem Klick setTimeout() aufrufen.JavaScript Timer

Wenn der Benutzer erneut klickt, bevor 300ms abgelaufen ist, möchte ich diesen Timer stoppen, eine andere Funktion auslösen und den ursprünglichen Timer neu starten.

Ich weiß über setTimeout(), aber ich bin mir nicht sicher, wie dieses Problem anzugehen.

Antwort

3

JavaScript:

myTimeout = setTimeout(function() { 
       // this will fire in 300ms if you don't perform some other action! 
      },300); 

document.getElementById("button").click = function() { 
    // button clicked, stop the timeout 
    clearTimeout(myTimeout); 
}; 

HTML:

<button id="button">Click me</button> 

Die setTimeout startet den 300 ms-Timer. Der Click-Handler bindet ein Click-Ereignis an eine Schaltfläche auf der Seite, die den Zeitgeber durch Klicken auf clearTimeout stoppt.

Wenn Sie setTimeout aufrufen, weisen Sie es einer Variablen zu. Dann können Sie diese Variable verwenden, um den Timer später durch Aufrufen von clearTimeout zu stoppen.

Sie können die gleiche Technik für jedes Ereignis verwenden, z. B. für Tastendruck, mouseover-Ereignisse, Schaltflächen- oder DOM-Elementklicks und vieles mehr.

Beachten Sie, dass das gleiche Verfahren auch für setInterval gilt.

myInterval = setInterval(function() { 
       // do stuff every 300ms 
      },300); 

clearInterval(myInterval); // stop the interval 

Mit addEventListener:

function start() { 
    window.addEventListener("click", function() { 
     timeout = setTimeout(function() { 
      // do stuff after 300ms after the first click 
      clearTimeout(timeout); 
      start(); 
     }, 300) 
    }, false); 
} 

Den oben sollte einen globalen Klick Zuhörer auf der Seite und klar binden und den Timer rekursiv nach einem Klick starten. Der Hörer stoppt, wenn es keine Klicks gibt, aber das sollte Ihnen den Einstieg erleichtern.

+0

Was ist, wenn ich es mit Event Listner hinzufügen möchte? –

+1

aktualisierte Antwort, dies sollte Sie beginnen. Viel Glück – jmort253

+0

jmort253 Sie waren wirklich nett, aber hier ist, was ich tun möchte, ich möchte ein Tortenmenü nach 300ms erscheinen, wenn ich nur geklickt habe, aber wenn ich Maus und Maus klicke, möchte ich, dass Kuchenmenü nicht erscheint und Option ausgewählt werden i habe alles getan, nur wirklich versucht, dies zu tun, aber es ist nicht passiert für mich .. und ich möchte dies mit sogar Handler tun, so dass ich sie hinzufügen und entfernen können –

0

Ich denke, Sie können Timeout für diese ... window.setTimeout ("", 300);

Ich habe nicht was genau Sie tun wollen ... aber, ich hoffe, das wird Ihnen helfen.

+1

Bitte tun Sie das nicht! 'setTimeout (" ")' [W3Fools] (http://w3fools.com/#js_timing) –