我正在编写一个手势/动作库,它也管理事件监听器和触发。我已经实现了我的lib来支持通过API设置被动侦听器的手势对象,如下所示: while (File.is_open())
{
File >> c;
Dealers.push_back(new CDealer(c));
}
。我的lib支持多种手势,设置多个被动,无论是被动还是非被动。 lib将确保最多只有一个真正的侦听器将附加到DOM。所以我们最多只能有2个 while (File >> c)
{
Dealers.push_back(new CDealer(c));
}
个听众,其中一个是被动的,另一个不是。
我的问题是,我无法检测收到的事件是否附有this.on('touchstart.passive', this.startHandler, { reject: errorHandler })
选项。我认为我可以在本机事件对象上使用touchstart
属性,因为在被动事件上调用{ passive: true }
是错误的。但cancelable
属性始终为true,即使浏览器会在preventDefault()
上抛出错误。
我已阅读WhatWG DOM standard on event listeners并在Firefox和Chrome中进行了一些测试,但无法找到有关如何区分这两类事件的任何信息。
这对我的图书馆来说非常重要,因为被动事件监听器使用cancelable
后置修复程序键入,例如preventDefault()
vs ".passive"
。
如何检查收到的DOM事件是否为被动选项,以便我可以触发正确的内部侦听器?
修改
目前我附加听众流程的要点是:
"touchstart.passive"
其中"touchstart"
是跟踪真实事件监听器的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)
}
答案 0 :(得分:3)
您可以在调用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 });
我在这个链接中找到了这个答案的灵感:https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
答案 1 :(得分:-2)
写一个if语句来检查监听器是否有" .passive"附接。