J'ai un très grand table
sur ma page. J'ai donc décidé de mettre une barre de défilement horizontale en bas du tableau. Mais j'aimerais que cette barre de défilement soit également au sommet de la table.
Voici ce que j'ai dans le modèle:
<div style="overflow:auto; width:100%; height:130%">
<table id="data" style="width:100%">...</table>
</div>
Est-ce possible de le faire uniquement en HTML et CSS?
javascript
jquery
html
css
psoares
la source
la source
Réponses:
Pour simuler une deuxième barre de défilement horizontale au-dessus d'un élément, placez un "factice"
div
au-dessus de l'élément qui a un défilement horizontal, juste assez haut pour une barre de défilement. Ensuite, attachez les gestionnaires de l'événement "scroll" pour l'élément factice et l'élément réel, pour obtenir l'autre élément synchronisé lorsque l'une des barres de défilement est déplacée. L'élément factice ressemblera à une deuxième barre de défilement horizontale au-dessus de l'élément réel.Pour un exemple en direct , voyez ce violon
Voici le code :
HTML:
CSS:
JS:
la source
Essayez d'utiliser le
jquery.doubleScroll
plugin :jQuery:
CSS:
HTML:
la source
Tout d'abord, bonne réponse, @StanleyH. Si quelqu'un se demande comment créer le conteneur à double défilement avec une largeur dynamique:
css
js
html
démo
http://jsfiddle.net/simo/67xSL/
la source
$('.div1').width( $('.div1')[0].scrollWidth)
pour obtenir la largeur de défilement réelle du contenu, utile lorsque vous n'utilisez pas spécifiquement un conteneur comme une table. @simo Excellent compagnon d'effort.Sans JQuery (2017)
Comme vous n'avez peut-être pas besoin de JQuery, voici une version fonctionnelle de Vanilla JS basée sur la réponse @StanleyH:
la source
Vous pouvez utiliser un plugin jQuery qui fera le travail pour vous:
Le plugin gérera toute la logique pour vous.
la source
La réponse de StanleyH était excellente, mais il y avait un bogue malheureux: cliquer sur la zone ombrée de la barre de défilement ne saute plus à la sélection sur laquelle vous cliquez. Au lieu de cela, vous obtenez un incrément très petit et quelque peu ennuyeux dans la position de la barre de défilement.
Testé: 4 versions de Firefox (affectées à 100%), 4 versions de Chrome (affectées à 50%).
Voici mon jsfiddle . Vous pouvez contourner ce problème en ayant une var on / off (vrai / faux) qui permet à un seul événement onScroll () de se déclencher à la fois:
Comportement du problème avec réponse acceptée:
Comportement réellement souhaité:
Alors, pourquoi cela se produit-il? Si vous parcourez le code, vous verrez que wrapper1 appelle scrollLeft de wrapper2, et wrapper2 appelle scrollLeft de wrapper1, et répétez cela indéfiniment, nous avons donc un problème de boucle infinie. Ou plutôt: le défilement continu de l'utilisateur entre en conflit avec l'appel de wrapperx du défilement, un conflit d'événement se produit et le résultat final n'est pas de sauter dans les barres de défilement.
J'espère que cela aide quelqu'un d'autre!
la source
Lier les scrollers fonctionnait, mais de la manière dont il est écrit, cela crée une boucle qui ralentit le défilement dans la plupart des navigateurs si vous cliquez sur la partie de la barre de défilement plus claire et maintenez-la enfoncée (pas lorsque vous faites glisser le défilement).
Je l'ai corrigé avec un drapeau:
la source
une solution javascript uniquement basée sur les réponses @HoldOffHunger et @bobince
.
la source
Basé sur la solution @StanleyH, j'ai créé une directive AngularJS , une démonstration sur jsFiddle .
Facile à utiliser:
Pour les développeurs AngularJS
la source
Autant que je sache, cela n'est pas possible avec HTML et CSS.
la source
En Javascript / Angular vanille, vous pouvez faire ceci comme ceci:
HTML:
CSS:
la source
En développant la réponse de StanleyH et en essayant de trouver le minimum requis, voici ce que j'ai implémenté:
JavaScript (appelé une fois de quelque part comme
$(document).ready()
):HTML (notez que les largeurs changeront la longueur de la barre de défilement):
C'est tout.
la source
à tous les fans angular / nativeJs, en implémentant la réponse de @ simo
HTML (pas de changement)
CSS (pas de changement, largeur: 90% est ma conception)
JS (comme
onload
) oungAfterViewChecked
(tous lesas
sont pourTypeScript
)la source
Si vous utilisez iscroll.js sur un navigateur Webkit ou un navigateur mobile, vous pouvez essayer:
la source
Une directive AngularJs pour y parvenir: Pour l'utiliser, ajoutez la classe css double-hscroll à votre élément. Vous aurez besoin de jQuery et AngularJs pour cela.
la source
Voici un exemple pour VueJS
sommaire
PRENEZ NOTE sur le
height: 12px
.. Je l'ai fait 12px donc il sera également remarqué sur les utilisateurs Mac. Mais avec windows, 0.1px est assez bonla source
Il y a un problème avec la direction de défilement: rtl. Il semble que le plugin ne le supporte pas correctement. Voici le violon: violon
Notez que cela fonctionne correctement dans Chrome, mais dans tous les autres navigateurs populaires, la direction de la barre de défilement supérieure reste à gauche.
la source