我只是好奇我遇到了以下包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()
}
首先检查是否有某种性能优势,或者如果不检查是否有可能引入错误?
不,据我所知。