基本的:
ボタンをクリックすると、機能 1 が実行
されます。1 秒以内にもう一度ボタンをクリックしないと、機能 2 が実行されます。
1 秒以内にボタンをクリックすると、機能 1 が再度実行されます。
などなど…
Javascriptでこれを行うロジックがわかりません。
方法はありますか?
ありがとうございます!
基本的:
ボタンをクリックすると、機能 1 が実行
されます。1 秒以内にもう一度ボタンをクリックしないと、機能 2 が実行されます。
1 秒以内にボタンをクリックすると、機能 1 が再度実行されます。
などなど…
Javascriptでこれを行うロジックがわかりません。
方法はありますか?
ありがとうございます!
時間を追跡するためにタイマーを使用する必要があります。setTimeout
機能 2 を 1 秒 (1000ms) で実行するために使用できます。ただし、ボタンをもう一度クリックする場合は、タイマーを停止する必要があります。を使用してそれを行うことができますclearTimeout
。
コアラインは次のとおりです。
var timer;
// in button's click handler:
clearTimeout(timer);
timer = setTimeout(function2, 1000);
これはそれを行う必要があります:
(function() {
var timer = null;
$('#button').on('click', function() {
function1(); // always call function1
clearTimeout(timer); // clear the timer
timer = setTimeout(function2, 1000); // run function2 1s later
});
})();
http://jsfiddle.net/alnitak/QZRTA/を参照してください
外側の関数ブロックはtimer
、グローバル変数を作成せずに変数をローカル スコープに保持する役割を果たします。
私の頭の上から(これをテストしていませんが、これは私にとって最も論理的なようです):
var t = null;
$("button").click(function() {
console.log("this is function 1");
if (t !== null) { window.clearTimeout(t); }
t = window.setTimeout(function() {
console.log("and this is function 2");
}, 1000);
});
setTimeout
と の使用clearTimeout
:
var t = null;
var timeoutMs = 1000; // in ms
$("#btn1").click(function (){
func1();
if (t !== null)
clearTimeout(t);
t = setTimeout(func2, timeoutMs);
});
$('button').click(function() {
console.log('Func 1');
clearTimeout($(this).data('throttle'));
$(this).data('throttle', setTimeout(function() {
console.log('Func 2');
}, 1000));
});