Mam duży stół z pionowym paskiem przewijania. Chciałbym przewinąć do określonego wiersza w tej tabeli przy użyciu jQuery / JavaScript.
Czy istnieją wbudowane metody, aby to zrobić?
div {
width: 100px;
height: 70px;
border: 1px solid blue;
overflow: auto;
}
<div>
<table id="my_table">
<tr id='row_1'><td>1</td></tr>
<tr id='row_2'><td>2</td></tr>
<tr id='row_3'><td>3</td></tr>
<tr id='row_4'><td>4</td></tr>
<tr id='row_5'><td>5</td></tr>
<tr id='row_6'><td>6</td></tr>
<tr id='row_7'><td>7</td></tr>
<tr id='row_8'><td>8</td></tr>
<tr id='row_9'><td>9</td></tr>
</table>
</div>
javascript
jquery
scroll
Misza Moroszko
źródło
źródło
scrollTo
wyśrodkować, a nie na górze:scrollTo.offset().top - container.offset().top + container.scrollTop() - (container.height()/2)
element.scrollIntoView()
- to wszystko, co jest wymagane. Animacja jest ustandaryzowana. Zobacz developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewZdaję sobie sprawę, że to nie odpowiada na przewijanie w kontenerze, ale ludzie uważają to za przydatne, więc:
Wybieramy zarówno html, jak i body, ponieważ moduł przewijania dokumentów może znajdować się na jednym z nich i trudno jest ustalić, który z nich. W przypadku nowoczesnych przeglądarek możesz uciec
$(document.body)
.Lub, aby przejść na górę strony:
Lub bez animacji:
LUB...
źródło
$('html,body')
? Potrzebuje tylko w określonym pojemniku. Zaakceptowana odpowiedź jest dla mnie lepsza. Mam podobny przypadek, jak zadane pytanie, a twoja odpowiedź nie działała dla mnie.Zgadzam się z Kevinem i innymi, użycie wtyczki do tego celu jest bezcelowe.
źródło
Udało mi się to zrobić samemu. Nie potrzebujesz żadnych wtyczek. Sprawdź moją treść :
źródło
No need for any plugins
?? Ale używasz jQuery! To cholernie ogromna biblioteka, nawet wtyczka.Możesz użyć
scrollIntoView()
metody w javascript. poprostu dajid.scrollIntoView();
Na przykład
źródło
Możesz użyć wtyczki jQuery scrollTo :
źródło
Przewiń element do środka kontenera
Aby przenieść element na środek pojemnika.
DEMO na CODEPEN
JS
HTML
css
Nie jest dokładnie na środku, ale nie rozpoznasz go na większych większych elementach.
źródło
Możesz przewijać według jQuery i JavaScript Potrzebujesz tylko dwóch elementów jQuery i tego kodu JavaScript:
Pokaż fragment kodu
źródło
Zrobiłem kombinację tego, co napisali inni. Jest prosty i gładki
źródło
Nie jestem pewien, dlaczego nikt nie mówi oczywistości, ponieważ istnieje wbudowana
scrollTo
funkcja javascript :Odniesienia .
źródło
Wbrew temu, co większość ludzi tutaj sugerują, polecam Ci zrobić użyć wtyczki jeśli chcesz animować ruch. Samo animowanie scrollTop nie wystarcza do płynnego działania użytkownika. Zobacz moją odpowiedź tutaj dla uzasadnienia.
Przez lata próbowałem wielu wtyczek, ale ostatecznie sam je napisałem. Możesz spróbować : jQuery.scrollable . Dzięki temu staje się akcja przewijania
Ale to nie wszystko. Musimy również ustalić pozycję docelową. Obliczenia widoczne w innych odpowiedziach,
głównie działa, ale nie jest całkowicie poprawne. Nie obsługuje poprawnie krawędzi kontenera przewijania. Element docelowy jest przewijany w górę za daleko, o rozmiar ramki. Oto demo.
Dlatego lepszym sposobem obliczenia pozycji docelowej jest
Ponownie spójrz na wersję demonstracyjną, aby zobaczyć, jak działa.
W przypadku funkcji, która zwraca pozycję docelową i działa zarówno dla kontenerów przewijanych w oknie, jak i poza oknem, możesz użyć tej funkcji . Komentarze tam wyjaśniają, w jaki sposób obliczana jest pozycja.
Na początku powiedziałem, że najlepiej byłoby użyć wtyczki do animowanego przewijania. Jednak nie potrzebujesz wtyczki, jeśli chcesz przejść do celu bez przejścia. Zobacz na to odpowiedź @James , ale pamiętaj, aby poprawnie obliczyć pozycję docelową, jeśli wokół kontenera znajduje się ramka .
źródło
O ile jest to warte, w ten sposób udało mi się osiągnąć takie zachowanie dla ogólnego elementu, który może być wewnątrz DIV z przewijaniem (bez znajomości kontenera)
Tworzy fałszywe dane wejściowe wysokości elementu docelowego, a następnie koncentruje się na nim, a przeglądarka zajmie się resztą bez względu na to, jak głęboko znajdujesz się w przewijanej hierarchii. Działa jak marzenie.
źródło
Zrobiłem to połączenie. to dla mnie praca. ale w obliczu jednego problemu, jeśli kliknięcie przenosi ten rozmiar div, jest zbyt duży, aby przewijać scenerię nie w dół do tego konkretnego div.
źródło