Что произойдет, если я не протестирую поддержку слушателей событий Passive? - PullRequest
0 голосов
/ 17 мая 2018

Chromium предупреждает меня, что слушатель событий не пассивен.

Хорошо.

Я не собираюсь использовать event.preventDefault() там, поэтому я хочу сделать его пассивным.

Но затем, когда я читаю подробное объяснение , в примере используется Modernizr для проверки доступности атрибута.

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

Но у меня не установлен Modernizr, и я испытываю боль при его настройке для этого очень конкретного случая использования.

Итак, вопрос: что произойдет, если я напишу вслепую:

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

в старых браузерах?

Я предполагаю, что объект может быть оценен до true, это правильно? Нет ошибки, которую нужно поднять?

1 Ответ

0 голосов
/ 17 июля 2018

{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);
...