2012-04-09 9 views
1

クリックした後にsetTimeout()に電話します。JavaScriptタイマー

300msが経過する前にユーザーが再度クリックすると、そのタイマーを停止し、別の機能をオフにして元のタイマーを再起動します。

私は約setTimeout()を知っていますが、この問題にどう対処するかはわかりません。

答えて

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> 

のsetTimeoutは300msのタイマーを開始します。クリックハンドラはクリックイベントをページ上のボタンにバインドします。このボタンをクリックすると、clearTimeoutを使用してタイマーが停止します。

setTimeoutを呼び出すときは、変数に代入します。その後、その変数を使用して、後でclearTimeoutを呼び出してタイマーを停止することができます。

キーストップ、マウスオーバーイベント、ボタンやDOM要素のクリックなど、どのようなイベントでも同じ手法を使用できます。

同じ手順がsetIntervalにも適用されることに注意してください。 addEventListenerをして​​

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

clearInterval(myInterval); // stop the interval 

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

上記のページにグローバルクリックリスナーをバインドするとクリアとクリックした後、再帰的にタイマーを再起動する必要があります。リスナーはクリックがなくても停止しますが、開始する必要があります。

+0

イベントリスナーを追加するとどうなりますか? –

+1

更新された回答、これはあなたを開始する必要があります。幸運 – jmort253

+0

jmort253あなたは本当に親切でしたが、ここで私は何をしたいですか私はちょうどクリックした場合、300ミリメートルの後に表示されるようにしたいですが、私はクリックしてマウスをドラッグすると、私はそれを追加して削除することができるように、私はハンドラでもこれをやりたいと思っています。 –

0

私はこのタイムアウトを使用することができます... window.setTimeout( ""、300);

私はまさにあなたがやりたいことはしませんでした...しかし、これがあなたを助けるでしょう。

+1

しないでください! 'setTimeout(" ")' [W3Fools](http://w3fools.com/#js_timing) –