Actualmente mi programa se encuentra en un punto en el que escucha al usuario desplazarse por un elemento determinado, pero también, a veces, desplaza automáticamente este elemento por sí mismo. (No es un desplazamiento gradual, bonito, sino un salto instantáneo. Tiene sentido en contexto, lo juro)Make "scrollLeft"/"scrollTop" cambios no desencadenan scroll event listener
¿Hay alguna manera de hacer que el evento de desplazamiento no se dispare si el desplazamiento se realizó configurando scrollLeft o scrollTop? Mi primer pensamiento fue un interruptor básico, como:
ignoreScrollEvents = true;
element.scrollLeft = x;
ignoreScrollEvents = false;
function onScroll() {
if(ignoreScrollEvents) return false;
}
pero ya que los eventos no activan de inmediato (perdón, duhh), que no es una solución viable. ¿Qué otro tipo de respuestas podría probar? También estoy usando jQuery, si eso ayuda a algo.
En mi código, me tocó un problema: a veces sucede que, por ejemplo, scrollLeft ya es 0, entonces mi código también lo establece en 0. Como tal, no se desencadena ningún evento de desplazamiento, y se ignora el siguiente desplazamiento del usuario. (Lo cual es realmente un problema si lo hacen desplazándose con Home, End, etc.) Pero esta es definitivamente una solución cercana, y sabía que me estaba perdiendo algo estúpido en esa implementación falsa. ¡Gracias! – Matchu
Me pregunté sobre eso ... Su mejor opción es verificar si está cambiando el valor antes de configurar la bandera; no lo configure si no lo está.Puede que ya tenga este código dividido en una función separada, pero si no lo hace, hacerlo lo haría más fácil; vea la respuesta de Rodrigo como ejemplo de esto. – Shog9