2011-03-22 15 views
12

¿Es posible desplazar 2 barras de desplazamiento con una barra de desplazamiento?Desplazar 2 barras de desplazamiento con jquery al mismo tiempo

+4

¿Qué hay de malo en responder algunas de sus otras preguntas? –

+0

Las personas estarán más inclinadas a responder tus preguntas si votas y aceptas las respuestas. Habiendo dicho eso, eche un vistazo a este complemento (una búsqueda rápida en Google) - http://blogs.msdn.com/b/matt/archive/2009/03/19/synchronizing-scrollbars-using-jquery.aspx – Bob

Respuesta

26

Todo lo que necesitas hacer es atar la propiedad scrollTop de un elemento al scrollTop de la otra, usando una función vinculada al evento scroll.

Algo a lo largo de las líneas de:

$('.linked').scroll(function(){ 
    $('.linked').scrollTop($(this).scrollTop());  
}) 

Con esta función, todos los elementos con una clase de linked se desplazará cada vez que utilice las barras de desplazamiento de uno de ellos. (Supuse desplazamiento vertical, si quería horizontal, haga lo mismo pero con scrollLeft)

Vea http://jsfiddle.net/g8Krz/510/ para un ejemplo de trabajo de los anteriores.

+0

no una solución de Firefox ... –

+1

Funciona bien en Firefox para mí. Creo que el problema era que las imágenes en jsfiddle ya no estaban allí, así que lo actualicé para apuntar a nuevas imágenes. El código en sí es jQuery, por lo que debe ser un navegador cruzado. – beeglebug

+0

cómo desacoplarlos ahora? la solución tejo funciona bien para acoplar barras de desplazamiento juntas ... pero, ¿qué se debe hacer para desacoplarlas todas? respuesta ASAP –

3

(anexar beeglebug):

Para horizontal uso 'ligada' desplazamiento:

$('.linked').scroll(function(){ 
    $('.linked').scrollLeft($(this).scrollLeft()); 
}); 
2

Quiero añadir una pequeña mejora a la solución de beeglebug (que ya está trabajando casi perfecto).

Si descubre muy lento SCROLLING utilizando el mouseWheel en algunos navegadores (por ejemplo, Opera), trata de usar identificadores únicos para los DIVs en lugar de la clase:

$('#master').scroll(function(){ 
$('#slave').scrollTop($(this).scrollTop()); 
}); 

he tenido este problema y probé muchas soluciones, pero esta finalmente fue la más fácil. Tomando una suposición salvaje, yo diría que OPERA tiene algunos problemas de rendimiento al identificar los DIV por clase todo el tiempo cuando se desplaza. (Apenas notado aumento masivo en el uso de la CPU durante el uso de la clase como identificador)

+1

Creo que el problema no es el .classes vs el #ids. El problema es que con las clases las estás vinculando entre sí. Si los vincula entre sí (como tengo que hacer ...) con los identificadores, el problema del mouse se mantiene.La razón por la cual el trabajo encuentra para usted es porque los está vinculando en una sola dirección. (desplazar el esclavo no hará que el maestro se desplace) –

0

Si usted está experimentando lento desplazamiento cuando está usando la rueda del ratón sobre la vinculación de las barras de desplazamiento con solución beeglebug, aquí es un truco para solucionarlo.

Lo bueno es que es un poco compacta y no utiliza ningún ID, únicas clases, mucho más sostenible.

// First add the class "linked-scrollbar" to the elements you want to link 

// Then manually or dynamically add an attribute which will contain 
// the data if the element is currently scrolling or not 
$('.linked-scrollbar').attr("data-scrolling", "false"); 

$('.linked-scrollbar').scroll(function(){ 
    if($(this).attr("data-scrolling") == "false"){ 
     $('.linked-scrollbar').not(this).attr("data-scrolling", "true"); 
     $('.linked-scrollbar').not(this).scrollLeft($(this).scrollLeft()); 
    } 
    $(this).attr("data-scrolling", "false"); 
}); 

Aquí hay un jsfiddle que muestra ese error y la solución.

+0

Esto no tiene nada que ver con la pregunta. –

+0

Lo es. Cuando se vinculan varias barras de desplazamiento con la solución beeglebug, algunas personas (como yo) tienen un desplazamiento muy lento (debido a un bucle entre eventos). Aquí hay un [jsfidle] (https://jsfiddle.net/sgcer/1274/) que muestra este error. Mi respuesta es solo una mejora (o una solución) para las personas que enfrentan este mismo problema. – Pilou

Cuestiones relacionadas