2011-08-25 6 views
3

キーダウンやクリックが10秒間ないかどうかを知る必要があります。アラートウィンドウを表示する場合、単純なjsより効率的であればjqueryを使用できます。秒数のキーダウンがない場合のアラートウィンドウ?

私はそれをどのように行うことができますか?このような感謝

+1

実行時に最も効率的なコーディングプロセスまたは最も効率的なコードについて質問していますか? – nnnnnn

+0

hah申し訳ありませんが、私は何を言おうとしたのか分かりません。私はちょうどそれをgoogled、私はそれがランタイムで最も効率的だと思います – lisovaccaro

答えて

5

何か:それはあなたがKeyDownイベントリスナーの文書に何かを結合しなかったと仮定し

(function(){ 

    var timer; 
    function resetTimer(){ 
     clearTimeout(timer); 
     timer = setTimeout(function(){ 
      alert('No keydown for 10 seconds'); 
      // Call reset timer here if you want the timer to start again 
      // when the alert is closed 

      // Otherwise, if you want to stop the timer forever, 
      // remove the event handler from document.onkeydown 
     }, 10000); 
    } 
    resetTimer(); 

    document.onkeydown = resetTimer; 

})(); 

JSFiddle

。あなたがそれを持っているならば、代わりにaddEventListenerattachEventを使うべきです。

+0

これは完璧なおかげで動作します – lisovaccaro

+0

効率的な各keydownの設定/クリアタイムアウトはありますか?つまり、誰かがタイピングしているときに、たくさんのタイマーが作成/クリアされています。 – Li0liQ

+0

@ Li0liQ Chromeのラップトップコンピュータでは、resetTimer()関数は約350,000回/秒を実行できます。誰かがそれを速く入力することができれば、それは恐ろしいことです:P。良いことは、ユーザーがアイドル状態であっても、CPUを占有するのではなく、アイドル状態のときにアイドル状態になることです。 – Paulpro

2
var seconds = 0; 

window.setInterval(function() { 
    seconds++; 
    if(seconds == 10) { 
    alert("No keydown or click in 10 seconds"); 
    } 
}, 1000); 

$('body').live('click keydown', function(e) { 
    e.preventDefault(); 
    seconds = 0; 
}); 

jQueryが必要です。キー/クリックが発生したかどうかを追跡するための変数を設定

+0

私はこれを編集しましたが、setIntervalの値は "1"に設定されていますが、タイマーの単位は秒ではなくミリ秒であるため、 "1000"に変更しました。 –

+0

なぜ 'preventDefault()'ですか? – nnnnnn

+0

ちょっと、ちょっと癖があります。ユースケースによっては、それを含めることもできないこともあります:) – Dmungara

0
  • var action_happened = false;
  • が10秒タイマー(10000ミリ秒SETTIMER)を設定しますと言います。
  • タイマーのコールバック内で、!action_happenedにアラートが表示されます。
  • グローバルなclick/keypressイベントハンドラを設定します。彼らのコールバックはちょうどaction_happened = true;
  • action_happened = true;を設定した後で効率を上げたい場合は、クリック/キー押しハンドラを削除します。それはオプションですが、このステップがないと効率的です。
関連する問題