Очистка тайм-аутов, которые находятся в условных блоках

#javascript

#язык JavaScript

Вопрос:

У меня есть тайм-ауты, которые инициализируются только при определенном прокручивании страницы. Проблема в том, что если я прокручиваю страницу и не жду тайм-аута, она продолжает переходить на следующую страницу. Поэтому я хочу очистить их, когда эта страница больше не будет иметь такого смещения прокрутки. Я обнаружил,что вы можете удалить тайм-ауты, только сохранив их в переменной (т. Е. пусть x = setTimeout(функция, время)), а затем очистив переменную. Но если я объявлю их внутри операторов блока, другие блоки не смогут получить к ним доступ. Но если я сделаю его глобальным, он инициализируется без каких-либо условий. Когда я пытаюсь заключить глобальный в функцию,чтобы она не выполнялась сразу (пусть x = ()=gt;{setTimeout(функция, время)})), я по какой-то причине больше не могу ее очистить.

 contain.addEventListener("scroll",()=gt;{ // Frame 1 if(contain.scrollTop == 0){  handleAudio2();  handleAudio3();  handleAudio4();  emptyParticlesTwo();  vid.pause(); } if(contain.scrollTop == window.innerHeight){  setTimeout(()=gt;{  contain.scrollBy(0,window.innerHeight)},23000) } if(contain.scrollTop == window.innerHeight*2){  setTimeout(()=gt;{  contain.scrollBy(0,window.innerHeight)},23000) }})  

Ответ №1:

Просто сохраните идентификатор тайм-аута в переменной, которая находится в области за пределами операторов if. Я бы также рекомендовал объединить ваши два утверждения if или поставить точку else перед вторым. То, как вы разместили их здесь, 2-е является избыточным (похоже, что 2-е «если» не должно быть в функции тайм-аута)

 var toID; if(contain.scrollTop == window.innerHeight){  toID = setTimeout(()=gt;{  contain.scrollBy(0,window.innerHeight)},23000) } if(contain.scrollTop == window.innerHeight*2){  toID = setTimeout(()=gt;{  contain.scrollBy(0,window.innerHeight)},23000) }})