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
$container.scrollTo( targetPosition );
Ale to nie wszystko. Musimy również ustalić pozycję docelową. Obliczenia widoczne w innych odpowiedziach,
$target.offset().top - $container.offset().top + $container.scrollTop()
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
var target = $target[0],
container = $container[0];
targetPosition = $container.scrollTop() + target.getBoundingClientRect().top - container.getBoundingClientRect().top - container.clientTop;
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 .