Ich habe eine sehr große table
auf meiner Seite. Also habe ich beschlossen, eine horizontale Bildlaufleiste am unteren Rand der Tabelle zu platzieren. Aber ich möchte, dass diese Bildlaufleiste auch ganz oben auf dem Tisch steht.
Was ich in der Vorlage habe, ist Folgendes:
<div style="overflow:auto; width:100%; height:130%">
<table id="data" style="width:100%">...</table>
</div>
Ist dies nur in HTML und CSS möglich?
javascript
jquery
html
css
psoares
quelle
quelle
Antworten:
Um eine zweite horizontale Bildlaufleiste über einem Element zu simulieren, platzieren Sie einen "Dummy"
div
über dem Element mit horizontalem Bildlauf, der gerade hoch genug für eine Bildlaufleiste ist. Fügen Sie dann Handler des Ereignisses "scroll" für das Dummy-Element und das reale Element hinzu, um das andere Element zu synchronisieren, wenn eine der Bildlaufleisten verschoben wird. Das Dummy-Element sieht aus wie eine zweite horizontale Bildlaufleiste über dem realen Element.Ein Live-Beispiel finden Sie in dieser Geige
Hier ist der Code :
HTML:
CSS:
JS:
quelle
Versuchen Sie es mit dem
jquery.doubleScroll
Plugin :jQuery:
CSS:
HTML:
quelle
Zuallererst eine großartige Antwort, @StanleyH. Wenn sich jemand fragt, wie der Double-Scroll-Container mit dynamischer Breite erstellt werden soll:
CSS
js
html
Demo
http://jsfiddle.net/simo/67xSL/
quelle
$('.div1').width( $('.div1')[0].scrollWidth)
diese Option , um die tatsächliche Bildlaufbreite des Inhalts abzurufen. Dies ist nützlich, wenn Sie keinen Container wie eine Tabelle verwenden. @ Simo Super Anstrengung Kumpel.Ohne JQuery (2017)
Da Sie JQuery möglicherweise nicht benötigen, finden Sie hier eine funktionierende Vanilla JS-Version, die auf der Antwort von @StanleyH basiert:
quelle
Sie können ein jQuery-Plugin verwenden, das die Aufgabe für Sie erledigt:
Das Plugin übernimmt die gesamte Logik für Sie.
quelle
Die Antwort von StanleyH war ausgezeichnet, hatte aber einen unglücklichen Fehler: Durch Klicken auf den schattierten Bereich der Bildlaufleiste wird nicht mehr zu der Auswahl gesprungen, auf die Sie klicken. Stattdessen erhalten Sie ein sehr kleines und etwas nerviges Inkrement an der Position der Bildlaufleiste.
Getestet: 4 Versionen von Firefox (100% betroffen), 4 Versionen von Chrome (50% betroffen).
Hier ist meine jsfiddle . Sie können dies umgehen, indem Sie eine Ein / Aus-Variable (true / false) verwenden, mit der jeweils nur ein onScroll () -Ereignis ausgelöst werden kann:
Problemverhalten mit akzeptierter Antwort:
Eigentlich gewünschtes Verhalten:
Warum passiert das? Wenn Sie den Code durchgehen, werden Sie feststellen, dass wrapper1 scrollLeft von wrapper2 aufruft und wrapper2 scrollLeft von wrapper1 aufruft, und dies unendlich wiederholen. Wir haben also ein Endlosschleifenproblem. Oder besser gesagt: Das fortgesetzte Scrollen des Benutzers steht in Konflikt mit dem Aufruf des Scrollers durch wrapperx, es tritt ein Ereigniskonflikt auf und das Endergebnis ist kein Springen in die Bildlaufleisten.
Hoffe das hilft jemand anderem!
quelle
Das Verknüpfen der Scroller hat funktioniert, aber in der Art und Weise, wie es geschrieben wurde, wird eine Schleife erstellt, die das Scrollen in den meisten Browsern verlangsamt, wenn Sie auf den Teil der helleren Bildlaufleiste klicken und ihn gedrückt halten (nicht beim Ziehen des Scrollers).
Ich habe es mit einer Flagge behoben:
quelle
Eine reine Javascript-Lösung, die auf den Antworten von @HoldOffHunger und @bobince basiert
.
quelle
Basierend auf der @ StanleyH-Lösung habe ich eine AngularJS-Direktive erstellt , eine Demo für jsFiddle .
Einfach zu verwenden:
Für AngularJS-Entwickler
quelle
Soweit mir bekannt ist, ist dies mit HTML und CSS nicht möglich.
quelle
In Vanilla Javascript / Angular können Sie dies folgendermaßen tun:
HTML:
CSS:
quelle
Um die Antwort von StanleyH zu erweitern und zu versuchen, das erforderliche Minimum zu finden, habe ich Folgendes implementiert:
JavaScript (einmal von irgendwo wie aufgerufen
$(document).ready()
):HTML (beachten Sie, dass die Breite die Länge der Bildlaufleiste ändert):
Das ist es.
quelle
an alle Angular / NativeJs-Fans, die die Antwort von @ simo implementieren
HTML (keine Änderung)
CSS (keine Änderung, Breite: 90% ist mein Wunsch)
JS (wie
onload
) oderngAfterViewChecked
(alleas
sind fürTypeScript
)quelle
Wenn Sie iscroll.js im Webkit-Browser oder im mobilen Browser verwenden, können Sie Folgendes versuchen:
quelle
Eine AngularJs-Direktive, um dies zu erreichen: Um sie zu verwenden, fügen Sie Ihrem Element die CSS-Klasse double-hscroll hinzu. Dazu benötigen Sie jQuery und AngularJs.
quelle
Hier ist ein Beispiel für VueJS
index.page
TAKE Hinweis auf die
height: 12px
.. Ich habe es 12px so wird es auch auf Mac - Benutzer bemerkt werden. Aber mit Windows ist 0.1px gut genugquelle
Es gibt ein Problem mit der Bildlaufrichtung: rtl. Es scheint, dass das Plugin es nicht richtig unterstützt. Hier ist die Geige: Geige
Beachten Sie, dass es in Chrome korrekt funktioniert, aber in allen anderen gängigen Browsern bleibt die Richtung der oberen Bildlaufleiste links.
quelle