再帰的にsetTimeoutを起こすと、イベントが増えに増える仕様のようで、ぎゅんぎゅん処理していて怖かったので覚書をば。
とりあえずNGソースを。
以下NGソース————–
var timerid;
document.addEventListener("keydown", function(e){
...
hoge();
});
function hoge(){
timerid = setTimeout("hoge()",1000);
}
以上NGソース————–
こう書くと、keydownをがんがん起こす(キー押しっぱなしとか)ことで、keydownを起こすのをやめても1000ミリ秒なんかよりずっと短い間隔でhoge()をがんがん回ってしまう。
以下OKソース————–
var timerid;
document.addEventListener("keydown", function(e){
...
hoge();
});
function hoge(){
clearTimeout(timerid); // 追加
timerid = setTimeout("hoge()",1000);
}
以上OKソース————–
setTimeoutをセットする前に、前回のsetTimeoutをclearTimeoutでクリアする。こうすると、どれだけ短い間隔でkeydownを起こしても、hoge()を1000ミリ秒で回ってくれる。