Entonces, vinculo una función al desplazamiento de la ventana, pero se ejecuta repetidamente cuando el usuario se desplaza.
Pero quiero que se ejecute una vez cuando el usuario se desplaza, y cuando finaliza el desplazamiento, cuando el usuario se desplaza de nuevo, quiero que se ejecute de nuevo.
En este momento mi código se ve así:
function whenScroll() { var zSection = $(".zSection").toArray(); if (window.calc == -1) { $(zSection[window.zSecPos]).stop().slideToggle(); } else { $(zSection[window.zSecPos-1]).stop().slideToggle(); } clearTimeout($.data(this, "scrollTimer")); $.data(this, "scrollTimer", setTimeout(function() { if (window.calc == -1) { window.zSecPos = window.zSecPos + 1; } else { window.zSecPos = window.zSecPos - 1; } }, 250)); } window.zSecPos = 0; $(window).scroll(function() { whenScroll(); });Por cierto, window.calc indica la dirección de desplazamiento, que determino en otro archivo js.
Acabé arreglándolo yo mismo. Lo siento.
La cuestión es que he separado todas las secciones largas de la página, por las que quiero desplazarme entre ellas.
Entonces, mi código final:
function whenScroll() { var zSection = $(".zSection").toArray(); clearTimeout($.data(this, "scrollTimer")); $.data(this, "scrollTimer", setTimeout(function() { if (window.calc == -1) { if ($(zSection[window.zSecPos+1]).length) { $(zSection[window.zSecPos]).stop().animate({ top: "-100vh" }, 300); window.zSecPos = window.zSecPos + 1; } } else { if ($(zSection[window.zSecPos-1]).length) { $(zSection[window.zSecPos-1]).stop().animate({ top: "0" }, 300); window.zSecPos = window.zSecPos - 1; } } console.log(window.zSecPos); }, 300)); } $(document).ready(function() { setTimeout(function() { $(".zSection").removeClass("displayNone"); }, 1000); }); window.zSecPos = 0; $(window).scroll(function() { whenScroll(); });