Как убрать слушателя события прокрутки? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь удалить прослушиватель события прокрутки, когда перехожу к какому-либо элементу. Я пытаюсь вызвать событие click, когда некоторые элементы находятся в области просмотра. Проблема состоит в том, что событие click продолжает вызывать все время или после первого вызова вообще. (Извините - трудно объяснить), и я хотел бы удалить событие прокрутки, чтобы прекратить вызывать функцию щелчка.

Мой код:

   window.addEventListener('scroll', () => {
   window.onscroll = slideMenu;

        // offsetTop - the distance of the current element relative to the top;
        if (window.scrollY > elementTarget.offsetTop) {
            const scrolledPx = (window.scrollY - elementTarget.offsetTop);

            // going forward one step
            if (scrolledPx < viewportHeight) {
                // console.log('section one');
                const link = document.getElementById('2');
                if (link.stopclik === undefined) {
                    link.click();
                    link.stopclik = true;
                }
            }

            // SECOND STEP
            if (viewportHeight < scrolledPx && (viewportHeight * 2) > scrolledPx) {
                console.log('section two');

                // Initial state
                let scrollPos = 0;
                window.addEventListener('scroll', () => {
                    if ((document.body.getBoundingClientRect()).top > scrollPos) { // UP
                        const link1 = document.getElementById('1');
                        link1.stopclik = undefined;
                        if (link1.stopclik === undefined) {
                            link1.click();
                            link1.stopclik = true;
                        }
                    } else {
                        console.log('down');
                    }
                    // saves the new position for iteration.
                    scrollPos = (document.body.getBoundingClientRect()).top;
                });
            }

            if ((viewportHeight * 2) < scrolledPx && (viewportHeight * 3) > scrolledPx) {
                console.log('section three');
            }

            const moveInPercent = scrolledPx / base;
            const move = -1 * (moveInPercent);

            innerWrapper.style.transform = `translate(${move}%)`;
        }
    });

1 Ответ

0 голосов
/ 18 января 2019

Вы можете удалить прослушиватели событий только на внешних функциях. Вы не можете удалить прослушиватели событий для анонимных функций, как вы использовали.

Заменить этот код

window.addEventListener('scroll', () => { ... };

и сделайте это вместо

window.addEventListener('scroll', someFunction);

Затем переместите логику функции в функцию

function someFunction() {
  // add logic here
}

Затем вы можете удалить прослушиватель щелчков, когда выполняется какое-либо условие, т.е. когда элемент находится в области просмотра

window.removeEventListener('scroll', someFunction);
...