- Плавный скролл до элемента
- 1. Плавный скролл с помощью jQuery
- 2. Плавный скролл для всех ссылок, начинающихся с #
- 3. Плавный скролл на чистом JavaScript — метод Element.scrollIntoView()
- 4. Плавный скролл на чистом JavaScript — метод Window.scrollBy()
- Статьи из данной категории:
- Способы добавления плавной прокрутки страницы в CSS и JavaScript
- Прокрутка страницы с помощью CSS
- Скроллинг с помощью jQuery
- Плавная прокрутка на JavaScript
- Решение 1. Метод scrollIntoView()
- Решение 2. Используем window.scrollBy() для плавной прокрутки.
- Решение 3. Использование методов requestAnimationFrame() и window.scrollTo() для плавной прокрутки
- Как создать кнопку скроллинга на сайте
- Способ №3. Кнопка прокрутки вверх и вниз
- Способ №5. Кнопка прокрутки наверх и вниз
- Плавная прокрутка CSS по якорным ссылкам
Плавный скролл до элемента
Реализуем следующее: после клика по ссылке будет происходить плавный скролл до элемента. Реализуем это без использования плагинов сначала при помощи jQuery, а затем на чистом JavaScript.
Сначала в HTML реализуем обычный «грубый» переход к секции, а затем уже добавим jQuery для создания плавности скролла.
Добавим id секциям к которым мы хотим выполнять скролл, а ссылкам атрибут href в формате #name. Решетка — означает идентификатор (id), а name — имя идентификатора.
HTML файл получится примерно такой.
Атрибут href указывает к какому элементу необходимо осуществить переход.
1. Плавный скролл с помощью jQuery
Теперь добавим плавности с помощью jQuery. В js-файле добавьте следующи код.
$(".scrollto a").on("click", function () < let href = $(this).attr("href"); $("html, body").animate(< scrollTop: $(href).offset().top >, < duration: 370, // по умолчанию «400» easing: "linear" // по умолчанию «swing» >); return false; >);
Чтобы добавить плавность перехода для необходимого элемента, просто добавьте навигации класс scrollto
Изменить скорость скролла можно поменяв значение duration
2. Плавный скролл для всех ссылок, начинающихся с #
Для этого мы обратимся к селектору атрибута тега a при помощи ^ — что будет означать, что мы выбираем все ссылки, начинающиеся с # (решётки)
$("a[href^='#']").on("click", function () < let href = $(this).attr("href"); $("html, body").animate(< scrollTop: $(href).offset().top >); return false; >);
3. Плавный скролл на чистом JavaScript — метод Element.scrollIntoView()
Будем использовать метод scrollIntoView(). Это стандартный нативный метод JavaScript.
const smoothLinks = document.querySelectorAll("a[href^='#']"); for (let smoothLink of smoothLinks) < smoothLink.addEventListener("click", function (e) < e.preventDefault(); const document.querySelector(id).scrollIntoView(< behavior: "smooth", block: "start" >); >); >;
У метода scrollIntoView() есть недостаток.
Если у нас будет навигация position: fixed, то нам необходимо добавить отступ сверху на x-пикселей, т.е. высоту навигации.
Для решения данной задачи отлично подойдёт метод Window.scrollBy().
4. Плавный скролл на чистом JavaScript — метод Window.scrollBy()
Метод Window.scrollBy() имеет параметр top в котором мы укажем количество пикселей, на сколько нам необходимо прокрутить страницу.
От общей высоты документа отнимем высоту навигации и получим необходимое смещение в пикселях по оси Y.
document.querySelectorAll("a[href^='#']").forEach(link => < link.addEventListener("click", function (e) < e.preventDefault(); let href = this.getAttribute("href").substring(1); const scrollTarget = document.getElementById(href); const topOffset = document.querySelector(".scrollto").offsetHeight; // const topOffset = 0; // если не нужен отступ сверху const elementPosition = scrollTarget.getBoundingClientRect().top; const offsetPosition = elementPosition - topOffset; window.scrollBy(< top: offsetPosition, behavior: "smooth" >); >); >);
Если нужен отступ сверху, укажите class элемента (навигации), чтобы вычислить его высоту. Если не нужен отступ, переменной topOffset присвойте значение 0.
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Статьи из данной категории:
Способы добавления плавной прокрутки страницы в CSS и JavaScript
Наверняка вы посещали страницы, которые плавно прокручивают контент при клике на ссылке к соответствующему блоку. Это красиво выглядит на лэндингах (LandingPage, или посадочная страница), в которых пространство страницы разбито на части, или в больших статьях с содержанием. Такая прокрутка называется скроллингом (от англ. scroll).
Однако, это не только красиво, но и достаточно просто с точки зрения реализации.
Прокрутка страницы с помощью CSS
Для того чтобы плавная прокрутка происходила на всей странице, необходимо добавить свойство scroll-behavior: smooth для селектора html .
Если плавная прокрутка необходима в пределах какого-то контейнера, то это свойство назначают для него.
По умолчанию свойство scroll-behavior имеет значение auto , т.е. прокрутка будет обычной, без эффекта плавности.
Посмотрите пример, основанный на css-свойстве (открыть в новой вкладке):
Примечание: в каждом примере есть 5 ссылок вверху для прокрутки к блокам текста и ссылка со стрелкой в правом нижнем углу для возврата наверх страницы. Используйте их для тестов свойств и методов для плавного скроллинга страницы.
Ложкой дегтя для этого свойства будет неполная поддержка его браузерами. Вы можете посмотреть, какова она на скриншоте и на caniuse.com.
Поддержка свойства scroll-behavor браузерами
Поэтому рассмотрим, как сделать плавную прокрутку с помощью jQuery и JavaScript.
Скроллинг с помощью jQuery
Понятно, что для использования jQuery вам нужно будет сначала подключить эту библиотеку. Дальше нужно будет отслеживать клики по ссылкам, у которых есть хэш ( # ) и анимировать свойство scrollTop для селектора $(‘html, body’) .
Это решение является кроссбраузерным, хотя у него есть один недостаток — если на вашем сайте jQuery не используется для работы с другими объектами/плагинами, то подключать лишние 88кб или порядка 40кб в gzip-сжатом виде не очень интересно ради 10-15 строк кода.
Пример (открыть в новой вкладке):
Плавная прокрутка на JavaScript
Здесь тоже есть 3 решения, каждое из которых использует свой подход к созданию плавности прокрутки с помощью разных JS-методов.
Решение 1. Метод scrollIntoView()
Из документации на MDN узнаем, что
Метод Element.scrollIntoView() прокручивает текущий контейнер родителя элемента, так, чтобы этот элемент, на котором был вызван scrollIntoView() был видим пользователю.
Этот метод имеет параметры, подобные css-свойству scroll-behavior: smooth для прокрутки контента к элементу с нужным id, указанным в виде хэш в ссылке.
const links = document . querySelectorAll ( ‘a[href^=»#»]’ ) ; // все ссылки, с атрибутом href, начинающимся с «#»
К сожалению, и тут не обошлось без «ложки дегтя» в виде поддержки браузеров. Давайте обратимся к caniuse.com и увидим такую картину:
Поддержка свойства scrollIntoView браузерами
К сожалению, нужное нам значение свойства behavior: ‘smooth’ поддерживается не всеми браузерами.
Кроме того, если верхняя панель навигации у нас зафиксирована, т.е. имеет свойство position: fixed , то нужно будет добавить к прокрутке смещение на ее высоту.
Пример прокрутки контента с помощью метода scrollIntoView() (открыть в новой вкладке)).
Решение 2. Используем window.scrollBy() для плавной прокрутки.
Тут все методы и свойства и имеют хорошую поддержку браузерами.
let links = document . querySelectorAll ( ‘a[href^=»#»]’ ) , // все ссылки, с атрибутом href, начинающимся с «#»
header = document . querySelector ( ‘header’ ) , //элемент header, который может быть спозиционирован абслютно или фиксированно
Код JavaScript предполагает, что на вашей странице нет абсолютно позиционированной или фиксированной шапки сайта (элемент ), в котором чаще всего размещаются ссылки-якоря на разделы страницы, поэтому переменная offsetTop (смещение сверху) сначала задана как 0.
Если же шапка сайта, например фиксирована (для этого в примере есть переключатель), то отступ сверху нужен и для (задается в классе .for-fixed ), и для всех тех блоков, на которые указывают ссылки. Поэтому в переменную offsetTop мы записываем расчетную высоту .
Пример прокрутки контента с помощью window.scrollBy() (открыть в новой вкладке)).
Решение 3. Использование методов requestAnimationFrame() и window.scrollTo() для плавной прокрутки
Метод window.requestAnimationFrame() позволяет выполнить анимацию, используя в качестве параметра функцию, которая будет вызвана перед перерисовкой экрана в браузере. В примере функция имеет имя step и плавно прокручивает окно браузера к соответствующему блоку с помощью метода window.scrollTo() в зависимости от параметра velocity , который задан, как .8 .
Как создать кнопку скроллинга на сайте
При прочтении статей с большим количеством информации встает необходимость установки кнопки прокрутки страницы. Кнопки скроллинга помогают быстро вернуться к началу страницы, перейти в конец или двигаться по блокам текста. Такую прокрутку можно сделать разными способами, их мы и рассмотрим.
Способ №1. Классическая кнопка «Вверх» с якорем-ссылкой
В редакторе шаблона в заголовке (header.php) перед закрывающимся тегом либо в подвале (footer.php) перед