Tengo un muy grande table
en mi página. Así que decidí poner una barra de desplazamiento horizontal en la parte inferior de la mesa. Pero me gustaría que esta barra de desplazamiento también esté en la parte superior de la tabla.
Lo que tengo en la plantilla es esto:
<div style="overflow:auto; width:100%; height:130%">
<table id="data" style="width:100%">...</table>
</div>
¿Es posible hacerlo solo en HTML y CSS?
javascript
jquery
html
css
psoares
fuente
fuente
Respuestas:
Para simular una segunda barra de desplazamiento horizontal en la parte superior de un elemento, coloque un "maniquí"
div
encima del elemento que tiene desplazamiento horizontal, lo suficientemente alto como para una barra de desplazamiento. Luego, adjunte los controladores del evento "scroll" para el elemento ficticio y el elemento real, para sincronizar el otro elemento cuando se mueva cualquiera de las barras de desplazamiento. El elemento ficticio se verá como una segunda barra de desplazamiento horizontal sobre el elemento real.Para ver un ejemplo en vivo , vea este violín
Aquí está el código :
HTML:
CSS:
JS:
fuente
Intenta usar el
jquery.doubleScroll
complemento :jQuery:
CSS:
HTML:
fuente
En primer lugar, una gran respuesta, @StanleyH. Si alguien se pregunta cómo hacer el contenedor de doble desplazamiento con ancho dinámico:
css
js
html
manifestación
http://jsfiddle.net/simo/67xSL/
fuente
$('.div1').width( $('.div1')[0].scrollWidth)
para obtener el ancho de desplazamiento real del contenido, útil cuando no está utilizando específicamente un contenedor como una tabla. @simo Increíble esfuerzo amigo.Sin JQuery (2017)
Como es posible que no necesite JQuery, aquí hay una versión funcional de Vanilla JS basada en la respuesta de @StanleyH:
fuente
Puede usar un complemento jQuery que hará el trabajo por usted:
El complemento manejará toda la lógica por ti.
fuente
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:
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!
fuente
La vinculación de los desplazadores funcionó, pero en la forma en que está escrita, crea un bucle que hace que el desplazamiento sea lento en la mayoría de los navegadores si hace clic en la parte de la barra de desplazamiento más clara y la mantiene presionada (no al arrastrar el desplazador).
Lo arreglé con una bandera:
fuente
Una solución única de JavaScript que se basa en las respuestas @HoldOffHunger y @bobince
.
fuente
Basado en la solución @StanleyH, creé una directiva AngularJS , demostración en jsFiddle .
Fácil de usar:
Para desarrolladores de AngularJS
fuente
Hasta donde yo sé, esto no es posible con HTML y CSS.
fuente
En vanilla Javascript / Angular puedes hacer esto así:
HTML:
CSS:
fuente
Ampliando la respuesta de StanleyH e intentando encontrar el mínimo requerido, esto es lo que implementé:
JavaScript (llamado una vez desde algún lugar como
$(document).ready()
):HTML (tenga en cuenta que los anchos cambiarán la longitud de la barra de desplazamiento):
Eso es.
fuente
a todos los fanáticos de angular / nativeJs, implementando la respuesta de @ simo
HTML (sin cambios)
CSS (sin cambios, ancho: 90% es mi diseño)
JS (como
onload
) ongAfterViewChecked
(todosas
son paraTypeScript
)fuente
Si está utilizando iscroll.js en el navegador webkit o en el navegador móvil, puede intentar:
fuente
Una directiva AngularJs para lograr esto: para usarlo, agregue la clase css double-hscroll a su elemento. Necesitarás jQuery y AngularJs para esto.
fuente
Aquí hay un ejemplo para VueJS
Página de inicio
TOMA NOTA sobre el
height: 12px
... Lo hice 12px para que se notará en los usuarios de Mac también. Pero con Windows, 0.1px es lo suficientemente buenofuente
Hay un problema con la dirección de desplazamiento: rtl. Parece que el complemento no lo admite correctamente. Aquí está el violín: violín
Tenga en cuenta que funciona correctamente en Chrome, pero en todos los demás navegadores populares la dirección de la barra de desplazamiento superior permanece a la izquierda.
fuente