回答編集履歴
2
ゴミコードを削除
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
let blockClick = false;
|
23
23
|
return function(e){
|
24
24
|
e.block = ms => (blockClick = true, setTimeout(() => blockClick = false, ms));
|
25
|
-
blockClick || f.bind(this)(e);
|
25
|
+
blockClick || f.bind(this)(e);
|
26
26
|
};
|
27
27
|
}
|
28
28
|
document.onclick = blockable((e) => {
|
1
ライブラリ化したコードを追加
answer
CHANGED
@@ -12,4 +12,22 @@
|
|
12
12
|
setTimeout(()=>blockClick = false, 1000);
|
13
13
|
}
|
14
14
|
}
|
15
|
+
```
|
16
|
+
で, このような汎用の処理はライブラリ化しておきたいので, 次のようにしてみる.
|
17
|
+
(あまり検証していないので, 使い方によってはバグがあるかもしれない.)
|
18
|
+
```JavaScript
|
19
|
+
"use strict";
|
20
|
+
{
|
21
|
+
function blockable(f){
|
22
|
+
let blockClick = false;
|
23
|
+
return function(e){
|
24
|
+
e.block = ms => (blockClick = true, setTimeout(() => blockClick = false, ms));
|
25
|
+
blockClick || f.bind(this)(e);console.log(this);
|
26
|
+
};
|
27
|
+
}
|
28
|
+
document.onclick = blockable((e) => {
|
29
|
+
console.log("clicked");
|
30
|
+
e.block(1000);//同一のイベント処理の発生を1000ms阻む
|
31
|
+
});
|
32
|
+
}
|
15
33
|
```
|