.scrollTo() — JavaScript — Дока
- Кратко
- Как пишется
- Как понять
- На практике
- Дока Дог советует
Кратко
СкопированоМетод scroll
позволяет программно прокрутить элемент до некоторой точки координат на странице.
Как пишется
Скопированоwindow.scrollTo(x, y)
window.scrollTo(x, y)
Где x и y — это координаты левого верхнего угла экрана.
Для скролла внутри элемента (например, в <div>
) нужно сначала получить этот элемент. Прокрутим первый на странице <div>
на 100 пикселей вниз (этот блок должен содержать достаточно контента, чтобы появился скроллбар):
const div = document.querySelector('div')div.scrollTo(0, 100)
const div = document.querySelector('div')
div.scrollTo(0, 100)
Вместо координат в scroll
можно передать объект с тремя параметрами:
top
задаёт количество пикселей для прокрутки по оси Y;left
то же самое, но по оси X;behavior
определяет поведение прокрутки. По умолчанию резкоеauto
smooth
.
window.scrollTo({ top: 100, left: 0, behavior: 'smooth'})
window.scrollTo({
top: 100,
left: 0,
behavior: 'smooth'
})
Как понять
Скопированоscroll
необходим в случае, когда прокрутку нужно совершить до определённых координат на экране. В случае прокрутки относительно текущего положения лучше воспользоваться scroll
, а в случае прокрутки до конкретного элемента — методом scroll
.
На практике
СкопированоДока Дог советует
Скопировано🛠 Прокрутка на определённые координаты полезна, когда вёрстка страницы или элемента одинакова. Это сложно гарантировать в реальном мире, где сайт пытается адаптироваться под разрешение экрана каждого пользователя. Но рассмотрим пример из идеальной вселенной:
Открыть демо в новой вкладкеВо вселенной, где адаптивный дизайн используется везде — используют scroll
или scroll
😎
Если вы нашли ошибку, отправьте нам пул-реквест!
Во время отправки формы что-то пошло не так. Попробуйте ещё раз?
←
.scrollIntoView()
ctrl + alt + ←
→
.classList
ctrl + alt + →
Отслеживание прокрутки · Bootstrap v5.2
Как это устроено
Scrollspy переключает класс .active
для элементов привязки (<a>
), когда элемент с id
, на который ссылается href
прокручивается в поле зрения. Scrollspy лучше всего использовать вместе с Bootstrap компонент навигации или группа списка, но он также будет работать с любыми якорными элементами на текущей странице. Вот как это работает.
Для запуска scrollspy требуется две вещи: навигация, группа списков или простой набор ссылок, а также прокручиваемый контейнер. Прокручиваемый контейнер может быть
<body>
или пользовательским элементом с установленнымиheight
иoverflow-y: scroll
.В прокручиваемом контейнере добавьте
data-bs-spy="scroll"
иdata-bs-target="#navId"
, гдеnavId
— это уникальныйid
соответствующей навигации. Не забудьте также включитьtabindex="0"
, чтобы обеспечить доступ с клавиатуры.Когда вы прокручиваете «шпионский» контейнер, класс
.active
добавляется и удаляется из якорных ссылок в соответствующей навигации. Ссылки должны иметь разрешимые цели
, в противном случае они игнорируются. Например,<a href="#home">Главная</a>
должна соответствовать чему-то в DOM, например,<div></div>
Целевые элементы, которые не видны, будут игнорироваться. Смотрите раздел Невидимые элементы ниже.
Примеры
Панель навигации
Прокрутите область под панелью навигации и посмотрите, как меняется активный класс. Откройте раскрывающееся меню и посмотрите, как будут выделены элементы раскрывающегося списка.
<nav> <a href="#">Панель навигации</a> <ul> <li> <a href="#scrollspyHeading1">Первый</a> </li> <li> <a href="#scrollspyHeading2">Второй</a> </li> <li> <a data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Выпадающий список</a> <ul> <li><a href="#scrollspyHeading3">Третий</a></li> <li><a href="#scrollspyHeading4">Четвертый</a></li> <li><hr></li> <li><a href="#scrollspyHeading5">Пятый</a></li> </ul> </li> </ul> </nav> <div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-root-margin="0px 0px -40%" data-bs-smooth-scroll="true" tabindex="0"> <h5>Первый заголовок</h5> <p>...</p> <h5>Второй заголовок</h5> <p>...</p> <h5>Третий заголовок</h5> <p>...</p> <h5>Четвертый заголовок</h5> <p>...</p> <h5>Пятый заголовок</h5> <p>...</p> </div>
Вложенная навигация
Отслеживание прокрутки также работает с вложенными
. Если вложенный .nav
имеет значение .active
, его родители также будут .active
. Прокрутите область рядом с панелью навигации и посмотрите, как меняется активный класс.
<div> <div> <nav> <nav> <a href="#item-1">Элемент 1</a> <nav> <a href="#item-1-1">Элемент 1-1</a> <a href="#item-1-2">Элемент 1-2</a> </nav> <a href="#item-2">Элемент 2</a> <a href="#item-3">Элемент 3</a> <nav> <a href="#item-3-1">Элемент 3-1</a> <a href="#item-3-2">Элемент 3-2</a> </nav> </nav> </nav> </div> <div> <div data-bs-spy="scroll" data-bs-target="#navbar-example3" data-bs-smooth-scroll="true" tabindex="0"> <div> <h5>Элемент 1</h5> <p>...</p> </div> <div> <h5>Элемент 1-1</h5> <p>...</p> </div> <div> <h5>Элемент 1-2</h5> <p>...</p> </div> <div> <h5>Элемент 2</h5> <p>...</p> </div> <div> <h5>Элемент 3</h5> <p>...</p> </div> <div> <h5>Элемент 3-1</h5> <p>...</p> </div> <div> <h5>Элемент 3-2</h5> <p>...</p> </div> </div> </div> </div>
Группа списка
Отслеживание прокрутки также работает с .list-group
. Прокрутите область рядом с группой списка и посмотрите, как меняется активный класс.
Элемент 1 Элемент 2 Элемент 3 Элемент 4
<div> <div> <div> <a href="#list-item-1">Элемент 1</a> <a href="#list-item-2">Элемент 2</a> <a href="#list-item-3">Элемент 3</a> <a href="#list-item-4">Элемент 4</a> </div> </div> <div> <div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabindex="0"> <h5>Элемент 1</h5> <p>...</p> <h5>Элемент 2</h5> <p>...</p> <h5>Элемент 3</h5> <p>...</p> <h5>Элемент 4</h5> <p>...</p> </div> </div> </div>
Простые якоря
Scrollspy не ограничивается компонентами навигации и группами списков, поэтому он будет работать с любыми якорными элементами <a>
в текущем документе. Прокрутите область и посмотрите, как изменится класс .active
.
Элемент 1 Элемент 2 Элемент 3 Элемент 4 Элемент 5
<div> <div> <div> <a href="#simple-list-item-1">Элемент 1</a> <a href="#simple-list-item-2">Элемент 2</a> <a href="#simple-list-item-3">Элемент 3</a> <a href="#simple-list-item-4">Элемент 4</a> <a href="#simple-list-item-5">Элемент 5</a> </div> </div> <div> <div data-bs-spy="scroll" data-bs-target="#simple-list-example" data-bs-offset="0" data-bs-smooth-scroll="true" tabindex="0"> <h5>Элемент 1</h5> <p>...</p> <h5>Элемент 2</h5> <p>...</p> <h5>Элемент 3</h5> <p>...</p> <h5>Элемент 4</h5> <p>...</p> <h5>Элемент 5</h5> <p>...</p> </div> </div> </div>
Невидимые элементы
.active
. Экземпляры Scrollspy, инициализированные в невидимой оболочке, будут игнорировать все целевые элементы. Используйте метод refresh
для проверки наблюдаемых элементов, как только оболочка станет видимой.document.querySelectorAll('#nav-tab>[data-bs-toggle="tab"]').forEach(el => { el.addEventListener('shown.bs.tab', () => { const target = el.getAttribute('data-bs-target') const scrollElem = document.querySelector(`${target} [data-bs-spy="scroll"]`) bootstrap.ScrollSpy.getOrCreateInstance(scrollElem).refresh() }) })
Использование
Через атрибуты данных
Чтобы легко добавить поведение прокрутки в навигацию верхней панели, добавьте data-bs-spy="scroll"
к элементу, за которым вы хотите следить (чаще всего это будет <body>
). Затем добавьте атрибут data-bs-target
с id
или именем класса родительского элемента любого компонента Bootstrap .nav
.
<body data-bs-spy="scroll" data-bs-target="#navbar-example"> ... <div> <ul role="tablist"> ... </ul> </div> ... </body>
Через JavaScript
const scrollSpy = new bootstrap.ScrollSpy(document.body, { target: '#navbar-example' })
Опции
Поскольку параметры можно передавать через атрибуты данных или JavaScript, вы можете добавить имя параметра к data-bs-
, как в data-bs-animation="{value}"
. Обязательно измените тип регистра имени параметра с “camelCase” на “kebab-case” при передаче параметров через атрибуты данных. Например, используйте data-bs-custom-class="beautifier"
вместо data-bs-customClass="beautifier"
.
Начиная с Bootstrap 5.2.0, все компоненты поддерживают экспериментальный зарезервированный атрибут данных data-bs-config
, который может содержать простую конфигурацию компонента в виде строки JSON. Когда элемент имеет атрибуты data-bs-config='{"delay":0, "title":123}'
и data-bs-title="456"
, окончательное значение title
будет 456
, а отдельные атрибуты данных переопределяют значения, указанные в data-bs-config
. Кроме того, существующие атрибуты данных могут содержать значения JSON, такие как data-bs-delay='{"show":0,"hide":150}'
.
Название | Тип | По умолчанию | Описание |
---|---|---|---|
rootMargin | string | 0px 0px -25% | Intersection Observer rootMargin допустимые единицы измерения при расчете положения прокрутки. |
smoothScroll | boolean | false | Включает плавную прокрутку, когда пользователь нажимает на ссылку, которая ссылается на наблюдаемые объекты ScrollSpy. |
target | string | jQuery object | DOM элемент | Указывает элемент для применения плагина Scrollspy. | |
threshold | array | [0.1, 0.5, 1] | IntersectionObserver threshold допустимый ввод при вычислении положения прокрутки. |
Устаревшие опции
Вплоть до версии 5.1.3 мы использовали параметры offset
и method
, которые теперь устарели и заменены на rootMargin
.
Чтобы сохранить обратную совместимость, мы продолжим синтаксический анализ заданного offset
до rootMargin
, но эта функция будет удалена в v6.
Методы
Метод | Описание |
---|---|
dispose | Уничтожает scrollspy элемента. (Удаляет сохраненные данные в элементе DOM). |
getInstance | Статический метод для получения экземпляра scrollspy, связанного с элементом DOM. |
getOrCreateInstance | Статический метод для получения экземпляра scrollspy, связанного с элементом DOM, или для создания нового экземпляра, если он не был инициализирован. |
refresh | При добавлении или удалении элементов в DOM вам необходимо вызвать метод обновления. |
Вот пример использования метода обновления:
const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]') dataSpyList.forEach(dataSpyEl => { bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh() })
События
Событие | Описание |
---|---|
activate.bs.scrollspy | Это событие срабатывает на элементе прокрутки всякий раз, когда якорь активируется scrollspy. |
const firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]') firstScrollSpyEl.addEventListener('activate.bs.scrollspy', () => { // сделайте что-нибудь... })
JavaScript Прокрутка вверх страницы с плавающей кнопкой — CodeHim
Асиф Могол
Плавающая кнопка прокрутки на ванильный JavaScript к началу страницы, позволяющая пользователям плавно переходить к началу страницы при нажатии на нее. Плагин создает красивую плавающую кнопку со стрелкой внизу страницы. После прокрутки страницы кнопка исчезает. После нажатия он исчезает, и страница плавно прокручивается вверх.
Обзор плагина
Плагин: | scrolltotop_arrow_js |
Автор: | Фабиан Линс |
Лицензия: | Лицензия Массачусетского технологического института |
Опубликовано: | 28 марта 2023 г. |
Репозиторий: | Форк на GitHub |
Зависимости: | Внешняя библиотека не требуется! |
Тип файла: | zip-архив (HTML, CSS и JavaScript) |
Размер упаковки: | 6,40 КБ |
Скачать демоверсию
Как заставить JavaScript прокручивать кнопку вверх страницы
1. Создайте элемент div
со следующим упомянутым именем класса. Это будет работать как плавающая кнопка «Вверх».
<дел>