#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) }})