Попри те , що більшість людей тут пропонують, я рекомендую вам зробити використовувати плагін , якщо ви хочете , щоб оживити рух. Просто анімації scrollTop недостатньо для безперебійного користування. Дивіться мою відповідь тут для міркувань.
Я спробував кілька плагінів протягом багатьох років, але врешті-решт написав сам. Можливо, ви захочете повернути це: jQuery.scrollable . Використовуючи це, дія прокрутки стає
$container.scrollTo( targetPosition );
Але це ще не все. Нам також потрібно виправити цільову позицію. Розрахунок, який ви бачите в інших відповідях,
$target.offset().top - $container.offset().top + $container.scrollTop()
здебільшого працює, але не зовсім коректно. Він не обробляє належну межу контейнера прокрутки. Цільовий елемент прокручується вгору занадто далеко, за розміром рамки.Ось демонстрація.
Отже, кращий спосіб обчислити цільову позицію
var target = $target[0],
container = $container[0];
targetPosition = $container.scrollTop() + target.getBoundingClientRect().top - container.getBoundingClientRect().top - container.clientTop;
Знову ж таки, подивіться на демонстрацію, щоб побачити її в дії.
Для функції, яка повертає цільове положення і працює як для віконних, так і для віконних контейнерів прокрутки, сміливо використовуйте цю суть . У коментарях, що містяться там, пояснюється, як обчислюється позиція.
На початку я сказав, що найкраще використовувати плагін для анімованої прокрутки. Однак плагін вам не потрібен, якщо ви хочете перейти до цілі без переходу. Дивіться на це відповідь @James , але переконайтесь, що ви правильно обчислили цільове положення, якщо навколо контейнера є межа.