如果我不测试Passive事件监听器支持会发生什么?

时间:2018-05-17 14:00:46

标签: javascript-events modernizr event-bubbling

Chromium给我一个关于我的事件监听器不被动的警告。

精细。

我不打算在那里使用event.preventDefault()所以我愿意让它变得被动。

但是当我阅读detailed explanation时,该示例使用Modernizr来检查该属性是否可用。

addEventListener(document, "touchstart", function(e) {
  }, Modernizr.passiveeventlisteners ? {passive: true} : false);

但是我没有安装Modernizr,我觉得为这个非常具体的用例设置它很痛苦。

所以问题是:如果我盲目地写下会发生什么:

$el.addEventListener('touchstart', () => {}, {passive: true})

在旧浏览器中?

我的猜测是对象可能会被评估为true,这是正确的吗?没有错误上升?

1 个答案:

答案 0 :(得分:0)

{passive: true}将被评估为true,因此应该摆脱Chromium警告,但是根据您提供的链接,它可能会在较旧的浏览器中产生“无法预料的结果”。

此方法(在该链接中也建议使用)对我来说似乎很不错,并且不需要任何其他库:

// 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);