sp1rob
@sp1rob

Как остановить, завершить обработчик событий eventListener JS?

Всем привет. Не нашел внятной информации по этой теме, точнее того что мне нужно не найти.
Есть обработчик:
let animatedArr = document.querySelectorAll('[data-animated]');
		
		for(let i = 0; i <= animatedArr.length - 1; i++) {
			
			let animatedElem = animatedArr[i];
			
			document.addEventListener('scroll', function () {
				
				let scroll = window.pageYOffset || document.documentElement.scrollTop;
				
				if(scroll >= animatedElem.offsetTop){
					
					animatedElem.classList.add('animated');
				}
				
			})
			
		}
  • Вопрос задан
  • 4906 просмотров
Решения вопроса 1
Зачем вы в цикле многократно слушаете одно и тоже событие?
Код должен выглядеть как-то так:

function handleScroll(scrollTop) {
	for(let i = 0; i <= arr.length - 1; i++){
		if (условие && scrollTop > 150) {
			arr[1].classList.add('class');
		} else if (условие) {
			arr[1].classList.remove('class');
		}
	}
}

document.addEventListener('scroll', handleScroll);

// в случае ухода со страницы или больше ненужно актуальное значение scrollTop стоит убрать ненужные действия
document.removeEventListener("scroll", handleScroll);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
SnaIP
@SnaIP
Front-end разработчик
ObsSpace
@ObsSpace
Не создавайте необходимости удалять eventListener, это усложняет понимание и ведёт к ошибкам, просто укажите однократный вызов

element.addEventListener('click', myClickHandler, {
  once: true
});
Ответ написан
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
for(let i = 0; i <= arr.length - 1; i++){
  arr[i].addEventListener('scroll', function(){
    if(условие){
     arr[i].onscroll= function() {
     	return false;
     }
     //здесь я хочу убрать этот обработчик
    }
  })
}


Способ не изящный, но без представления о задаче, по заданным исходникам, работать будет.
Ответ написан
Ваш ответ на вопрос

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

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