JavaScriptですべてのイベントを一時的に無効にするにはどうすればよいですか? 何かをクリックしてから 700 ミリ秒後まで一部のイベントが実行されないように、それらを無効にしたいと考えています。
5 に答える
すべてのクリックを一時的に無効にしようとしている場合、ページやコードの残りの部分を変更せずにそれを行う簡単な方法は、すべてのクリックの伝播をインターセプトして停止する透明な div をページ全体に絶対的に配置することです。イベント。次に、 setTimeout() を使用して、必要な時間間隔でその透明な div を削除します。
ページの HTML に blockDiv を配置して、既に存在するようにします。
あなたのHTMLで:
<body>
<div id="blockDiv"></div>
... other page HTML here
</body>
次に、この CSS をページに配置します。
#blockDiv {
position: absolute;
left: 0;
right: 0;
height: 100%;
width: 100%;
z-index: 999;
}
そして、この javascript:
$("#blockDiv").click(function(e) {
// stop propagation and prevent default by returning false
return false;
});
setTimeout(function() {
$("#blockDiv").remove();
}, 700);
setTimeout を使用する
$('a').click(function( e ){
e.preventDefault();
setTimeout(function(){
// DO SOMETHING AFTER 700ms
},700);
});
setTimeout
あなたが望むものです。
setTimeout() メソッドは、指定されたミリ秒数の経過後に関数を呼び出すか式を評価します。
1) 呼び出す関数またはコード、および2
) コード/関数を実行する前に待機するミリ秒数です。
setTimeout(function(){
//do your stuff
},700);
この記事を見てください。これは、急速に発生するイベントを遅延してリッスンする方法を示しています
$.fn.bindDelayEvent = function(eventName, delay, fnc){
$this = $(this);
var timer = undefined;
var delayFnc = function(){
clearTimeout(timer);
var self = this;
var args = arguments;
timer = setTimeout(function(){
fnc.apply(self, args);
}, delay);
}
$this.bind(eventName, delayFnc);
}
$(window).bindDelayEvent("resize", 1000, function () {
alert("click event fires after 1000ms")
});
ページ上のすべてのイベントを無効にするのは非常に簡単です。難しいのは、必要に応じてそれらを復元することです。
document.body.innerHTML = document.body.innerHTML;
これにより、DOM をその「バージン」コピーに置き換えることで、DOM ノードにバインドされたすべてのイベントが効果的に削除されます。
ほとんどの場合、ユーザーは再描画に気付かないでしょう。
一定期間後にそれらを復元する限り、innerHTML を置き換える前に DOM のコピーを保存して試すことができます。
oOldDom = document.cloneNode(1);
そして後で復元します。