EventTarget.addEventListener() 您所在的位置:网站首页 事件监听有什么作用和意义 EventTarget.addEventListener()

EventTarget.addEventListener()

2024-04-04 04:14| 来源: 网络整理| 查看: 265

在旧版本的 DOM 的规定中,addEventListener() 的第三个参数是一个布尔值,表示是否在捕获阶段调用事件处理程序。随着时间的推移,很明显需要更多的选项。与其在方法之中添加更多参数(传递可选值将会变得异常复杂),倒不如把第三个参数改为一个包含了各种属性的对象,这些属性的值用来被配置删除事件侦听器的过程。

因为旧版本的浏览器(以及一些相对不算古老的)仍然假定第三个参数是布尔值,你需要编写一些代码来有效地处理这种情况。你可以对每一个你感兴趣的 options 值进行特性检测。

如果你想检测 passive 值,可以参考下面这个例子:

jslet passiveSupported = false; try { const options = { get passive() { // 该函数会在浏览器尝试访问 passive 值时被调用。 passiveSupported = true; return false; }, }; window.addEventListener("test", null, options); window.removeEventListener("test", null, options); } catch (err) { passiveSupported = false; }

这段代码为 passive 属性创建了一个带有 getter 函数的 options 对象;getter 设定了一个标识 passiveSupported,被调用后就会把其设为 true。那意味着如果浏览器检查 options 对象上的 passive 值时,passiveSupported 将会被设置为 true;否则它将保持 false。然后我们调用 addEventListener() 去设置一个指定这些选项的空事件处理器,这样如果浏览器将第三个参数认定为对象的话,这些选项值就会被检查。我们再调用 removeEventListener() 来移除事件处理器(注意:未被调用的事件处理器上的 handleEvent() 会被忽略)。

你可以利用这个方法检查 options 之中任一个值。只需使用与上面类似的代码,为选项设定一个 getter。

然后,当你想实际创建一个是否支持 options 的事件侦听器时,你可以这样做:

jssomeElement.addEventListener( "mouseup", handleMouseUp, passiveSupported ? { passive: true } : false, );

我们在 someElement 这里添加了一个 mouseup。对于第三个参数,如果 passiveSupported 是 true,我们传递了一个 passive 值为 true 的 options 对象;如果相反的话,我们知道要传递一个布尔值,于是就传递 false 作为 useCapture 的参数。

如果你愿意,你可以用一个类似 Modernizr 或 Detect It 的第三方库来帮助你做这项测试。

你可以在 Web Incubator Community Group 里关于EventListenerOptions 的文章中了解更多。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有