В большинстве случаев лучше всего использовать плагин. Шутки в сторону. Я собираюсь рассказать здесь . Конечно, есть и другие. Но, пожалуйста, проверьте, действительно ли они избегают ловушек, для которых вам нужен плагин - не все из них.
Я написал о причинах использования плагина в другом месте . В двух словах, один вкладыш подкрепляет большинство ответов здесь
$('html, body').animate( { scrollTop: $target.offset().top }, duration );
плохой UX.
Анимация не реагирует на действия пользователя. Это продолжается, даже если пользователь нажимает, касается или пытается прокрутить.
Если начальная точка анимации близка к целевому элементу, анимация мучительно медленная.
Если целевой элемент находится в нижней части страницы, его нельзя прокрутить до верхней части окна. Анимация прокрутки внезапно останавливается в середине движения.
Для решения этих проблем (и куча других ), вы можете использовать мой плагин, jQuery.scrollable . Звонок становится
$( window ).scrollTo( targetPosition );
и все. Конечно, есть больше опций .
Что касается целевой позиции, $target.offset().top
выполняет работу в большинстве случаев. Но учтите, что возвращаемое значение не учитывает границы элемента html
( см. Эту демонстрацию ). Если вам нужно, чтобы целевая позиция была точной при любых обстоятельствах, лучше использовать
targetPosition = $( window ).scrollTop() + $target[0].getBoundingClientRect().top;
Это работает, даже если установлена граница для элемента html
.