Mam bardzo duży table
na mojej stronie. Postanowiłem więc umieścić poziomy pasek przewijania na dole tabeli. Ale chciałbym, aby ten pasek przewijania był również na górze stołu.
To, co mam w szablonie, to:
<div style="overflow:auto; width:100%; height:130%">
<table id="data" style="width:100%">...</table>
</div>
Czy można to zrobić tylko w HTML i CSS?
javascript
jquery
html
css
psoares
źródło
źródło
Odpowiedzi:
Aby zasymulować drugi poziomy pasek przewijania na górze elementu, umieść „atrapę”
div
nad elementem, który ma przewijanie w poziomie, wystarczająco wysoko, aby zmieścić pasek przewijania. Następnie dołącz moduły obsługi zdarzenia „scroll” dla elementu fikcyjnego i elementu rzeczywistego, aby zsynchronizować inny element po przesunięciu któregoś z suwaków. Fikcyjny element będzie wyglądał jak drugi poziomy pasek przewijania nad rzeczywistym elementem.Aby zobaczyć przykład na żywo , zobacz to skrzypce
Oto kod :
HTML:
CSS:
JS:
źródło
Spróbuj użyć
jquery.doubleScroll
wtyczki :jQuery:
CSS:
HTML:
źródło
Przede wszystkim świetna odpowiedź, @StanleyH. Jeśli ktoś się zastanawia jak zrobić kontener typu double scroll z dynamiczną szerokością:
css
js
html
próbny
http://jsfiddle.net/simo/67xSL/
źródło
$('.div1').width( $('.div1')[0].scrollWidth)
aby uzyskać rzeczywistą szerokość przewijania treści, przydatne, gdy nie używasz specjalnie kontenera, takiego jak tabela. @simo Niesamowity wysiłek mate.Bez JQuery (2017)
Ponieważ możesz nie potrzebować JQuery, oto działająca wersja Vanilla JS oparta na odpowiedzi @StanleyH:
źródło
Możesz użyć wtyczki jQuery, która zrobi to za Ciebie:
Wtyczka zajmie się całą logiką za Ciebie.
źródło
Odpowiedź StanleyH była doskonała, ale miała jeden niefortunny błąd: kliknięcie zacienionego obszaru paska przewijania nie powoduje już przejścia do zaznaczenia, które kliknąłeś. Zamiast tego otrzymujesz bardzo mały i nieco irytujący przyrost pozycji paska przewijania.
Przetestowano: 4 wersje przeglądarki Firefox (w 100%), 4 wersje przeglądarki Chrome (w 50%).
Oto mój jsfiddle . Możesz obejść ten problem, mając zmienną on / off (prawda / fałsz), która pozwala na wyzwolenie tylko jednego zdarzenia onScroll () w danym momencie:
Zachowanie problemowe z zaakceptowaną odpowiedzią:
Właściwie pożądane zachowanie:
Więc dlaczego tak się dzieje? Jeśli przejdziesz przez kod, zobaczysz, że wrapper1 wywołuje scrollLeft wrapper2, a wrapper2 wywołuje scrollLeft wrapper1 i powtarzamy to w nieskończoność, więc mamy problem z nieskończoną pętlą. Albo raczej: ciągłe przewijanie użytkownika powoduje konflikt z wywołaniem przewijania przez wrapperx, pojawia się konflikt zdarzeń i wynikiem końcowym nie jest przeskakiwanie pasków przewijania.
Mam nadzieję, że to pomoże komuś innemu!
źródło
Łączenie przewijaków zadziałało, ale w sposób, w jaki jest napisane, tworzy pętlę, która spowalnia przewijanie w większości przeglądarek, jeśli klikniesz na część jaśniejszego paska przewijania i przytrzymasz go (nie podczas przeciągania rolki).
Naprawiłem to flagą:
źródło
rozwiązanie tylko javascript oparte na odpowiedziach @HoldOffHunger i @bobince
.
źródło
W oparciu o rozwiązanie @StanleyH stworzyłem dyrektywę AngularJS , demo na jsFiddle .
Łatwy w użyciu:
Dla programistów AngularJS
źródło
O ile wiem, nie jest to możliwe w przypadku HTML i CSS.
źródło
W waniliowym Javascript / Angular możesz to zrobić w ten sposób:
HTML:
CSS:
źródło
Rozszerzając odpowiedź StanleyH i próbując znaleźć wymagane minimum, zaimplementowałem:
JavaScript (wywołany raz z jakiegoś miejsca
$(document).ready()
):HTML (pamiętaj, że szerokości zmienią długość paska przewijania):
Otóż to.
źródło
dla wszystkich fanów angular / nativeJs, wdrażając odpowiedź @ simo
HTML (bez zmian)
CSS (bez zmian, szerokość: 90% to mój projekt)
JS (jak
onload
) lubngAfterViewChecked
(wszystkieas
są dlaTypeScript
)źródło
Jeśli używasz iscroll.js w przeglądarce webkit lub przeglądarce mobilnej, możesz spróbować:
źródło
Dyrektywa AngularJs, aby to osiągnąć: Aby z niej skorzystać, dodaj podwójny hscroll klasy css do swojego elementu. Będziesz potrzebował do tego jQuery i AngularJs.
źródło
Oto przykład dla VueJS
index.page
ZWRÓĆ UWAGĘ na
height: 12px
... Zrobiłem to 12px, więc zostanie zauważone również na użytkownikach komputerów Mac. Ale w przypadku okien 0,1px wystarczyźródło
Występuje problem z kierunkiem przewijania: rtl. Wygląda na to, że wtyczka nie obsługuje go poprawnie. Oto skrzypce: skrzypce
Zwróć uwagę, że działa poprawnie w Chrome, ale we wszystkich innych popularnych przeglądarkach górny kierunek paska przewijania pozostaje w lewo.
źródło