javascript - 在添加事件侦听器之前是否需要检查浏览器是否支持某个事件

我只是好奇我遇到了以下包https://github.com/ayamflow/virtual-scroll。并且在初始化时,他们在添加事件侦听器之前检查浏览器支持。像这样:

if (support.hasWheelEvent) {
    this.#el.addEventListener(
        'wheel',
        this._onWheel,
        this.listenerOptions
    )
}
...ect for all events

然后支持对象看起来像:

export function getSupport() {
    return {
        hasWheelEvent: 'onwheel' in document,
        hasMouseWheelEvent: 'onmousewheel' in document,
        hasTouch: 'ontouchstart' in document,
        hasTouchWin: navigator.msMaxTouchPoints && navigator.msMaxTouchPoints > 1,
        hasPointer: !!window.navigator.msPointerEnabled,
        hasKeyDown: 'onkeydown' in document,
        isFirefox: navigator.userAgent.indexOf('Firefox') > -1,
    }
}

我想知道这是否有必要。如果浏览器不支持指定的事件,它不会忽略它吗?

如果我在非触摸浏览器中执行以下操作,我不会收到任何错误。

const onTouchStart = () => {}
document.addEventListeners('touchstart', onTouchStart)

首先检查是否有某种性能优势,或者如果您不检查是否有可能引入错误?

无论如何让我知道。谢谢。

回答1

如果不支持指定的事件,浏览器不会直接忽略它吗?

在此示例中没有区别(添加侦听器),但有时您想调用不受支持的函数,这可能会导致错误。

例如,Firefox、IE 和 Safari 不支持使用 https://developer.mozilla.org/en-US/docs/Web/API/Battery_Status_API。在这些浏览器中运行此代码将引发错误:

navigator.getBattery()

检查函数是否存在首先解决问题:

if ('navigator' in window && typeof navigator.getBattery === 'function') {
  navigator.getBattery()
}

首先检查是否有某种性能优势,或者如果不检查是否有可能引入错误?

不,据我所知。

相似文章

search - Binary Search 复杂性

binarysearch将n个元素的数组作为用户输入的时间复杂度是多少?由于binarysearch的时间复杂度是O(logn)而将数组作为用户输入的时间复杂度是O(n)...

随机推荐

最新文章