回答編集履歴

2

ゴミコードを削除

2018/04/20 01:04

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  e.block = ms => (blockClick = true, setTimeout(() => blockClick = false, ms));
48
48
 
49
- blockClick || f.bind(this)(e);console.log(this);
49
+ blockClick || f.bind(this)(e);
50
50
 
51
51
  };
52
52
 

1

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

2018/04/20 01:04

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -27,3 +27,39 @@
27
27
  }
28
28
 
29
29
  ```
30
+
31
+ で, このような汎用の処理はライブラリ化しておきたいので, 次のようにしてみる.
32
+
33
+ (あまり検証していないので, 使い方によってはバグがあるかもしれない.)
34
+
35
+ ```JavaScript
36
+
37
+ "use strict";
38
+
39
+ {
40
+
41
+ function blockable(f){
42
+
43
+ let blockClick = false;
44
+
45
+ return function(e){
46
+
47
+ e.block = ms => (blockClick = true, setTimeout(() => blockClick = false, ms));
48
+
49
+ blockClick || f.bind(this)(e);console.log(this);
50
+
51
+ };
52
+
53
+ }
54
+
55
+ document.onclick = blockable((e) => {
56
+
57
+ console.log("clicked");
58
+
59
+ e.block(1000);//同一のイベント処理の発生を1000ms阻む
60
+
61
+ });
62
+
63
+ }
64
+
65
+ ```