La respuesta de StanleyH fue excelente, pero tuvo un error desafortunado: hacer clic en el área sombreada de la barra de desplazamiento ya no salta a la selección en la que hace clic. En cambio, lo que obtienes es un incremento muy pequeño y algo molesto en la posición de la barra de desplazamiento.
Probado: 4 versiones de Firefox (100% afectado), 4 versiones de Chrome (50% afectado).
Aquí está mi jsfiddle . Puede solucionar esto con una variable on / off (true / false) que permite que solo se active un evento onScroll () a la vez:
var scrolling = false;
$(".wrapper1").scroll(function(){
if(scrolling) {
scrolling = false;
return true;
}
scrolling = true;
$(".wrapper2")
.scrollLeft($(".wrapper1").scrollLeft());
});
$(".wrapper2").scroll(function(){
if(scrolling) {
scrolling = false;
return true;
}
scrolling = true;
$(".wrapper1")
.scrollLeft($(".wrapper2").scrollLeft());
});
Comportamiento problemático con respuesta aceptada:
Comportamiento realmente deseado:
Entonces, ¿por qué sucede esto? Si ejecuta el código, verá que wrapper1 llama a scrollLeft de wrapper2, y wrapper2 llama a scrollLeft de wrapper1, y repite esto infinitamente, por lo tanto, tenemos un problema de bucle infinito. O, más bien: el desplazamiento continuo del usuario entra en conflicto con la llamada de wrapperx al desplazamiento, se produce un conflicto de evento y el resultado final es no saltar en las barras de desplazamiento.
Espero que esto ayude a alguien más!