Отметить событие как явно НЕ пассивное

1

[Нарушение] Добавлен непассивный прослушиватель событий к событию "колесо" с блокировкой прокрутки. Рассмотрите обработчик событий маркировки как "пассивный", чтобы сделать страницу более отзывчивой.

Это предупреждение, похоже, нервничает, чтобы быть честным. У меня есть событие, когда мне иногда нужно вызвать preventDefault()

Есть ли способ отметить событие как явно НЕ пассивное и избавиться от этого предупреждения? Я знаю, что это не мешает исполнению, но это раздражение. Все, что я могу найти, это отметить его пассивным, но это настольное приложение, для которого не требуется пассивный маркер для оптимизации прокрутки.

Я не уверен, что хром думал, когда они реализовали это как предупреждение по умолчанию, чтобы загромождать консоль dev. Я чувствую, что что-то вроде кнопки согласия теперь в EULAS, не читайте, просто нажмите "ОК", предупреждение о cookie, просто нажмите "ОК"... Я не хочу исправлять это, я хочу игнорировать его, сознательно.

Изображение 174551

Теги:
google-chrome
events

2 ответа

1
Лучший ответ

Укажите пассив: false при добавлении слушателя:

el.addEventListener('click', someFn, { passive: false });

См. Https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener.

  • 0
    Ты мой герой. и для тех кто гуглит это ;-)
  • 0
    Следует ли отметить, что для браузеров, которые не поддерживают options , для useCapture будет установлено useCapture true? developer.mozilla.org/en-US/docs/Web/API/EventTarget/...
Показать ещё 1 комментарий
0

Вышеупомянутое решение работает, но требует изменения для каждого вызова addEventListener.

Если вы предпочитаете отключать предупреждения с помощью одного изменения, которое влияет на все вызовы addEventListener, которые вы уже написали в старой форме, вы можете сделать что-то вроде следующего (изменено с qaru.site/questions/13841202/...). Вы можете дополнительно изменить это, если вы хотите, чтобы он выборочно обрабатывал/сообщал/и т.д.

var addEventListener_orig = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(type, handler, opts_orig) {
  var opts;
  if(opts_orig === false || opts_orig === true)
    opts = { capture: opts_orig, passive: false };
  else if(!(opts_orig && opts_orig.constructor == Object))
    opts = { passive: false };
  else
    opts = opts_orig;

  arguments[2] = opts;
  return addEventListener_orig.apply(this, arguments);
};

Обратите внимание: поскольку это изменяет базовый объект, сторонние библиотеки могут действовать по-другому (хотя я не могу придумать какой-либо сценарий, где это могло бы произойти, если только библиотека 3p также не будет использовать патч addEventListener, как указано выше, если я не ошибаюсь, просто заполняет значения по умолчанию, которые в противном случае используются, когда они не были явно предоставлены, и тем самым предупреждает об этом)

  • 0
    Обратите внимание, что при изменении базового объекта сторонние библиотеки могут работать по-другому, поскольку они могут не ожидать внесенных изменений.
  • 0
    Спасибо! добавлено - если вы не согласны с добавленным комментарием, что код просто явно указывает значения, которые будут неявно использоваться, пожалуйста, lmk

Ещё вопросы

Сообщество Overcoder
Наверх
Меню