* 触发节点事件
(eventName, {
event, args = [], isCapture, isTarget
} = {})
| 213 | * 触发节点事件 |
| 214 | */ |
| 215 | $$trigger(eventName, { |
| 216 | event, args = [], isCapture, isTarget |
| 217 | } = {}) { |
| 218 | eventName = eventName.toLowerCase() |
| 219 | const handlers = this.$_getHandlers(eventName, isCapture) |
| 220 | const onEventName = `on${eventName}` |
| 221 | |
| 222 | if (!event) { |
| 223 | const document = this.ownerDocument |
| 224 | const window = document ? document.defaultView : null |
| 225 | event = new Event({ |
| 226 | timeStamp: window ? window.performance.now() : Date.now(), |
| 227 | touches: [], |
| 228 | changedTouches: [], |
| 229 | name: eventName, |
| 230 | target: this, |
| 231 | eventPhase: Event.AT_TARGET, |
| 232 | }) |
| 233 | } |
| 234 | |
| 235 | if ((!isCapture || !isTarget) && typeof this[onEventName] === 'function') { |
| 236 | // 触发 onXXX 绑定的事件 |
| 237 | if (event && event.$$immediateStop) return |
| 238 | try { |
| 239 | event.returnValue = this[onEventName].call(this || null, event, ...args) |
| 240 | } catch (err) { |
| 241 | console.error(err) |
| 242 | this.$$triggerWindowError(err) |
| 243 | } |
| 244 | } |
| 245 | |
| 246 | if (!handlers) return |
| 247 | |
| 248 | // 触发 addEventListener 绑定的事件 |
| 249 | if (handlers.length) { |
| 250 | [...handlers].forEach(handler => { |
| 251 | if (event && event.$$immediateStop) return |
| 252 | try { |
| 253 | handler.call(this || null, event, ...args) |
| 254 | } catch (err) { |
| 255 | console.error(err) |
| 256 | this.$$triggerWindowError(err) |
| 257 | } |
| 258 | }) |
| 259 | } |
| 260 | |
| 261 | // 触发 addEventListener 绑定到命名空间下的事件 |
| 262 | if (handlers._namespace) { |
| 263 | Object.keys(handlers._namespace).forEach(namespace => { |
| 264 | const namespaceHandlers = handlers._namespace[namespace] |
| 265 | if (namespaceHandlers && namespaceHandlers.length) { |
| 266 | [...namespaceHandlers].forEach(handler => { |
| 267 | if (event && event.$$immediateStop) return |
| 268 | try { |
| 269 | handler.call(this || null, event, ...args) |
| 270 | } catch (err) { |
| 271 | console.error(err) |
| 272 | this.$$triggerWindowError(err) |
no test coverage detected