如果我不测试被动事件侦听器支持会怎样?
What happens if I don't test Passive event listeners support?
Chromium 警告我我的事件侦听器不是被动的。
很好。
我不会在那里使用 event.preventDefault()
所以我愿意让它成为被动的。
但是当我阅读 detailed explanation 时,示例使用 Modernizr 检查属性是否可用。
addEventListener(document, "touchstart", function(e) {
}, Modernizr.passiveeventlisteners ? {passive: true} : false);
但我没有安装 Modernizr,我发现很难为这个非常具体的用例设置它。
所以问题是:如果我盲目地写会发生什么:
$el.addEventListener('touchstart', () => {}, {passive: true})
?
在旧浏览器中?
我的猜测是对象可能被评估为 true
,对吗?没有错误要上升?
{passive: true}
将被评估为 true
以便应该摆脱 Chromium 警告,但根据您提供的 link,它可能有 "unforseen results"旧版浏览器。
这个方法(也在那个link中建议)对我来说似乎很好,而且不需要任何其他库:
// Test via a getter in the options object to see if the passive property is accessed
var supportsPassive = false;
try {
var opts = Object.defineProperty({}, 'passive', {
get: function() {
supportsPassive = true;
}
});
window.addEventListener("testPassive", null, opts);
window.removeEventListener("testPassive", null, opts);
} catch (e) {}
// Use our detect's results. passive applied if supported, capture will be false either way.
elem.addEventListener('touchstart', fn, supportsPassive ? { passive: true } : false);
Chromium 警告我我的事件侦听器不是被动的。
很好。
我不会在那里使用 event.preventDefault()
所以我愿意让它成为被动的。
但是当我阅读 detailed explanation 时,示例使用 Modernizr 检查属性是否可用。
addEventListener(document, "touchstart", function(e) {
}, Modernizr.passiveeventlisteners ? {passive: true} : false);
但我没有安装 Modernizr,我发现很难为这个非常具体的用例设置它。
所以问题是:如果我盲目地写会发生什么:
$el.addEventListener('touchstart', () => {}, {passive: true})
?
在旧浏览器中?
我的猜测是对象可能被评估为 true
,对吗?没有错误要上升?
{passive: true}
将被评估为 true
以便应该摆脱 Chromium 警告,但根据您提供的 link,它可能有 "unforseen results"旧版浏览器。
这个方法(也在那个link中建议)对我来说似乎很好,而且不需要任何其他库:
// Test via a getter in the options object to see if the passive property is accessed
var supportsPassive = false;
try {
var opts = Object.defineProperty({}, 'passive', {
get: function() {
supportsPassive = true;
}
});
window.addEventListener("testPassive", null, opts);
window.removeEventListener("testPassive", null, opts);
} catch (e) {}
// Use our detect's results. passive applied if supported, capture will be false either way.
elem.addEventListener('touchstart', fn, supportsPassive ? { passive: true } : false);