Tengo tiempos de espera que solo se inicializan cuando la página se desplaza una cierta cantidad. El problema es que si me desplazo a una página y no espero el tiempo de espera, continúa pasando a la página siguiente. Así que quiero borrarlos cuando esa página ya no esté en ese desplazamiento de desplazamiento. Descubrí que solo puede borrar los tiempos de espera almacenándolos en una variable (es decir, let x = setTimeout(func,time)) y luego borrando la variable. Pero si los declaro dentro de las declaraciones del bloque, los otros bloques no pueden acceder a él. Pero si lo hago global, se inicializa sin ninguna condición. Cuando intento encerrar el global en una función para que no se ejecute de inmediato (let x = ()=>{setTimeout(func,time)}), ya no puedo borrarlo por alguna razón.
contain.addEventListener("scroll",()=>{ // Frame 1 if(contain.scrollTop == 0){ handleAudio2(); handleAudio3(); handleAudio4(); emptyParticlesTwo(); vid.pause(); } if(contain.scrollTop == window.innerHeight){ setTimeout(()=>{ contain.scrollBy(0,window.innerHeight)},23000) } if(contain.scrollTop == window.innerHeight*2){ setTimeout(()=>{ contain.scrollBy(0,window.innerHeight)},23000) }})Simplemente guarde la identificación del tiempo de espera en una variable que esté en un ámbito fuera de las declaraciones if. También recomendaría combinar sus dos sentencias if o poner un else antes de la segunda. De la forma en que los ha publicado aquí, el segundo es redundante (parece que el segundo 'si' no debería estar en la función de tiempo de espera)
var toID; if(contain.scrollTop == window.innerHeight){ toID = setTimeout(()=>{ contain.scrollBy(0,window.innerHeight)},23000) } if(contain.scrollTop == window.innerHeight*2){ toID = setTimeout(()=>{ contain.scrollBy(0,window.innerHeight)},23000) }})