Una manera de hacer esto consiste en guardar la posición anterior del
scroll y la nueva por cada vez que se produzca el evento —que es más o menos lo que has venido haciendo—, luego, comparas a ambos valores y desplazas el
scroll hacia arriba si la nueva posición es menor que la anterior, o hacia abajo si la nueva posición es mayor que la anterior. La cantidad a desplazarse será igual a la altura del contenedor o de los hijos de este por el valor de un contador que aumentará o disminuirá de a uno ya sea que se esté subiendo o bajando.
Código Javascript
:
Ver originalvar padre = document.querySelector("#padre"),
ant = 0, //Posición anterior del scroll
pos = 0, //Nueva posición del scroll
i = 0; //Contador
padre.addEventListener("scroll", function(){
pos = this.scrollTop; //Tomo la nueva posición
if (pos > ant){ //Si está bajando
this.scrollTop = this.offsetHeight * ++i;
}
else if (pos < ant){ //Si está subiendo
this.scrollTop = this.offsetHeight * --i;
}
ant = this.scrollTop; //Actualizo la vieja posición
}, false);
DEMO
Un saludo