回答編集履歴
5
追記
test
CHANGED
@@ -155,3 +155,15 @@
|
|
155
155
|
};
|
156
156
|
|
157
157
|
```
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
### 追記
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
取り消しに対応した observe メソッドです。
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
[Add 'observe(type)' method which monitor events to HTMLElement in JavaScript](https://gist.github.com/Zuishin/6c5ae7fc66fa31db175bb034878e096d)
|
4
修正
test
CHANGED
@@ -155,11 +155,3 @@
|
|
155
155
|
};
|
156
156
|
|
157
157
|
```
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
### 追記
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
よく考えると、Promise の reject メソッドを呼べばいいだけなので、シンプルなもので十分でした。
|
3
追記
test
CHANGED
@@ -155,3 +155,11 @@
|
|
155
155
|
};
|
156
156
|
|
157
157
|
```
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
### 追記
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
よく考えると、Promise の reject メソッドを呼べばいいだけなので、シンプルなもので十分でした。
|
2
修正
test
CHANGED
@@ -133,3 +133,25 @@
|
|
133
133
|
</html>
|
134
134
|
|
135
135
|
```
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
### 追記
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
[EventTarget.addEventListener()](https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener) は option に once を渡すことで実行後自動的に削除できますが、将来、実行されなかったものを削除できる仕組みに拡張したいため、あえて removeEventListener() を入れています。
|
144
|
+
|
145
|
+
入れないなら次のようにシンプルになります。
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
```JavaScript
|
150
|
+
|
151
|
+
HTMLElement.prototype.observe = function (type) {
|
152
|
+
|
153
|
+
return new Promise(resolve => this.addEventListener(type, resolve, {once: true}));
|
154
|
+
|
155
|
+
};
|
156
|
+
|
157
|
+
```
|
1
修正
test
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
|
57
57
|
HTMLElement.prototype.observe = function (type) {
|
58
58
|
|
59
|
-
const
|
59
|
+
const getHandler = resolve => {
|
60
60
|
|
61
61
|
const result = () => {
|
62
62
|
|
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
};
|
72
72
|
|
73
|
-
return new Promise(resolve => this.addEventListener(type,
|
73
|
+
return new Promise(resolve => this.addEventListener(type, getHandler(resolve)));
|
74
74
|
|
75
75
|
};
|
76
76
|
|