teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ゴミコードを削除

2018/04/20 01:04

投稿

defghi1977
defghi1977

スコア4756

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);console.log(this);
25
+ blockClick || f.bind(this)(e);
26
26
  };
27
27
  }
28
28
  document.onclick = blockable((e) => {

1

ライブラリ化したコードを追加

2018/04/20 01:04

投稿

defghi1977
defghi1977

スコア4756

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
  ```