dot*_*ter 6 javascript w3c dom dom-events
我正在编写一个手势/动作库,它也管理事件监听器和触发.我已经实现了我的lib支持手势对象通过,看起来像这样的API将被动的听众:this.on('touchstart.passive', this.startHandler, { reject: errorHandler }).我的lib支持多种手势,设置多个被动,无论是被动还是非被动.lib将确保最多只有一个真正的侦听器将附加到DOM.所以我们最多只能有2个touchstart听众,其中一个是被动的,另一个不是.
我的问题是,我无法检测收到的事件是否附有{ passive: true }选项.我认为我可以cancelable在本机事件对象上使用该属性,因为调用preventDefault()被动事件是一个错误.但该cancelable属性始终为true,即使浏览器会抛出错误preventDefault().
我已经在事件监听器上阅读了WhatWG DOM标准,并在Firefox和Chrome中进行了一些测试,但无法找到有关如何区分这两类事件的任何信息.
这是我的图书馆显著,因为被动的事件监听器与键".passive"后修复,例如"touchstart.passive"VS "touchstart".
如何检查收到的DOM事件是否被动选项,这样我可以触发正确的内部监听器?
编辑
目前我附加监听器的流程的要点是:
function eventNotifier(event) {
this.fire(event.cancelable ? event.type : event.type + '.passive', new GestureEvent(event))
}
addEvent(el, realEventName, eventNotifier, options)
nativeListeners.set(eventName, 1)
function addEvent (el, type, listener, options) {
el.addEventListener(type, listener, options || true)
}
Run Code Online (Sandbox Code Playgroud)
这里nativeListeners是一个Map是守实事件侦听器的轨道
您可以event.defaultPrevented在调用 之后测试 的值event.preventDefault();。如果它是一个被动事件,浏览器将为调用抛出警告/错误,但它不会停止 javascript 的执行。所以以下应该工作:
document.addEventListener('touchstart', function(event) {
event.preventDefault();
if (event.defaultPrevented) {
// This is not a passive event
} else {
// This is a passive event
}
}, { passive: true });Run Code Online (Sandbox Code Playgroud)
我在这个链接中找到了这个答案的灵感:https : //github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |