@KononovD

Как в классе навешивать и удалять EventListner'ы?

Писал свой плагин для скролла страницы (типо fullPage.js)
в функциональном стиле написал, все нормально работало
Дальше начал решать проблему "а как подключить эту библиотеку?" переписал в ООП, сделал классом, чтобы этот класс импортировать в main.js и там уже .init()
Но вот столкнулся вот с чем:
я при инициации навешиваю событие на окно:
window.addEventListener("mousewheel", this.onWheel.bind(this))

(да, я знаю, что можно использовать стрелочные методы, вместо .bind(this), но у меня почему-то babel-polyfill не подключается, не очень хочу с этим сейчас возиться)
потом, когда это событие срабатывает - я его удаляю:
window.removeEventListener("mousewheel", this.onWheel.bind(this));

и через 600 мс навешиваю обратно:
setTimeout(() => {window.addEventListener("mousewheel", this.onWheel.bind(this))}, 600);

(примерно 600мс длится анимация скролла к нужному блоку)
И вот собственно в чем проблема: событие навешивается, но не удаляется. Как быть? Что делать?
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Вам следует осознать, что

this.onWheel.bind(this) !== this.onWheel.bind(this) // true

Сохраняйте куда-нибудь созданный обработчик при добавлении, и при удалении передавайте в removeEventListener его, а не новую функцию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы