OnlyScrollbar

Кастомный скроллбар, который позволяет дополнить стандартное поведение браузера и добавляет инерцию для увеличения плавности

Установка

С помощью npm:

npm install only-scrollbar

Использование

Рекомендуется использование синтаксиса ES6, с применением import

import OnlyScrollbar from 'only-scrollbar';

const scroll = new OnlyScrollbar(document.querySelector('.scroll-container'));

Контейнер, в котором будет проинициализирован скрол должен придерживаться тех же правил, что и обычный скрол-контейнер:

Конструктор класса OnlyScrollbar принимает до двух аргументов:

argumenttypedescription
elementHTMLHtmlElement | Element | Window | string | null | undefinedHTML-элемент или css-селектор, по которому будет найден первый подходящий элемент. Является основным контейнером внутри которого происходит скрол и все расчеты
optionsOnlyScrollbarOptions | undefinedПараметры инициализации

Возможные параметры инициализации (OnlyScrollbarOptions)

parametertypedescription
dampingnumberСила замедления инерции. Рекомендуется указывать значения в промежутке от 0 до 1. Значение по умолчанию 1
eventContainerHTMLHtmlElement | Element | Window | stringHTML-элемент или css-селектор, по которому будет найден первый подходящий элемент. Является элементом, который будет обрабатывать события, предназначавшиеся скрол контейнеру. По умолчанию равен основному скрол контейнеру
speednumberМодификатор скорости для колесика мыши. Значение по умолчанию 1
anchorsAnchorsOptionsДополнительные опции для ссылок-якорей. По умолчанию включена обработка нативных браузерных якорей через хэш в ссылках
axisY | XНаправление скрола. По умолчанию Y
listenAxisY | XОсь, которая будет прослушиваться обработчиком событий. По умолчанию совпадает со значением параметра axis

Возможные параметры для настройки ссылок-якорей

parametertypedescription
offsetnumberОтступ от верхней границы экрана в пикселях. По умолчанию 0
stopPropagationbooleanПредотвращает всплытие события click. По умолчанию false
activebooleanОпределяет наличие обработки ссылок-якорей. По умолчанию true
rootHTMLElementОпределяет элемент, внутри которого будет обрабатываться событие click по якорям. Полезно, если якоря находятся за пределами scrollContainer. По умолчанию является scrollContainer
typenative | customПозволяет выбрать тип обработки якорей. По умолчанию native

В случае использования type: 'custom' необходимо использовать атрибуты data-os-anchor и data-os-anchor-id. Элементы с одинаковыми значениями таких атрибутов будут обрабатываться аналогично стандартному браузерному поведению с атрибутами href и id

import OnlyScrollbar from 'only-scrollbar';

const scroll = new OnlyScrollbar('#scroll-container-id', {
    damping: 0.8,
    eventContainer: window,
    anchors: {
        type: 'custom',
        offset: 200
    }
});

API

Для обращения к свойствам и методам класса OnlyScrollbar, требуется создать экземпляр класса

import OnlyScrollbar from 'only-scrollbar';

const scroll = new OnlyScrollbar('.scroll-container');
scroll.destroy();

Свойства

OnlyScrollbar.Attributes

Статичное поле класса. Содержит названия, используемых data-атрибутов

OnlyScrollbar.СlassNames

Статичное поле класса. Содержит перечень основных css-классов, которые добавляются на scrollContainer

OnlyScrollbar.Events

Статичное поле класса. Содержит названия, кастомных js-событий

OnlyScrollbar.scrollContainer

Основной контейнер внутри которого происходит скрол и все основные расчеты

Для того чтобы применить плавный скрол для всей страницы, в качестве контейнера достаточно указать объект window или document.scrollingElement

Объект window не может быть контейнером для скрола, но вместо него будет установлен document.scrollingElement

OnlyScrollbar.eventContainer

Элемент, на который будут применяться все события

В отличие от scrollContainer может быть объектом window, но не document.scrollingElement

OnlyScrollbar.options

Хранит параметры инициализации

OnlyScrollbar.isLocked

Логическое значение, показывающее заблокирован ли скрол.

Заблокированный скрол не позволяет выполняться событиям синхронизации и событиям для перерасчета позиции. Не блокирует скрол на touch-устройствах

OnlyScrollbar.position

Текущее значение позиции скрола. Значение поля scrollTop или scrollLeft в зависимости от направления скрола

OnlyScrollbar.direction

type Direction = 1 | -1

Возвращает текущее направление скрола в числовом представлении: 1 = Down/Right, -1 = Up/Left

OnlyScrollbar.isStart

Возвращает true, если текущая позиция = 0

OnlyScrollbar.isEnd

Возвращает true, если текущая позиция совпадает с максимально возможной позицией внутри скрол-контейнера

OnlyScrollbar.isScrolling

Возвращает true, если в данный момент выполняется плавный скрол

Методы

OnlyScrollbar.scrollTo

scroll.scrollTo(position: number): void
argumenttypedescription
positionnumberЦелевая позиция скрола

Плавный скрол до конкретной позиции, с применением стандартных расчетов для вычисления промежуточных значений

Example:

scroll.scrollTo(600);

OnlyScrollbar.scrollIntoView

scroll.scrollIntoView(element: HTMLElement, offset?: number): void
argumenttypedescription
elementHTMLElementЦелевой HTML-элемент
offsetnumberСмещение скрола (По умолчанию = 0)

Плавный скрол до переданного элемента с применением дополнительного отступа, если такой необходим

Example:

const targetElement = document.querySelector('#target');
scroll.scrollIntoView(targetElement, 200);

OnlyScrollbar.setValue

scroll.setValue(value: number): void
argumenttypedescription
valuenumberЦелевая позиция скрола

Установка конкретного значения позиции скрола, без применения каких-либо анимаций

Example:

scroll.setValue(600);

OnlyScrollbar.stop

scroll.stop(): void

Останавливает скрол на текущей позиции

OnlyScrollbar.lock

scroll.lock(): void

Блокирует скрол

Блокировка также вызовет метод stop

OnlyScrollbar.unlock

scroll.unlock(): void

Разблокирует скрол.

OnlyScrollbar.addEventListener

scroll.addEventListener(type: OnlyScrollbarEvents, eventHandler: EventHandler, options: AddEventListenerOptions): void
argumenttypedescription
typeOnlyScrollbarEventsНазвание события. Возможно использовать стандарные события браузера или события OnlyScrollbar
eventHandlerEventHandlerФункция обработчик события
optionsAddEventListenerOptionsПараметры обработчика события

Добавляет обработчик события на eventContainer

const scrollEndHandler = () => {
    /* ... */
}
scroll.addEventListener('scrollEnd', scrollEndHandler, { once: true });

OnlyScrollbar.removeEventListener

scroll.removeEventListener(type: OnlyScrollbarEvents, eventHandler: EventHandler): void
argumenttypedescription
typeOnlyScrollbarEventsНазвание события. Возможно использовать стандарные события браузера или события OnlyScrollbar
eventHandlerEventHandlerФункция обработчик события

Удаляет существующий обработчик события на eventContainer

const scrollEndHandler = () => {
    /* ... */
}
scroll.removeEventListener('scrollEnd', scrollEndHandler);

OnlyScrollbar.destroy

scroll.destroy(): void

Очистка событий, таймеров, классов и атрибутов

События

os:start

Начало процесса плавного скрола

os:end

Завершение процесса плавного скрола

os:change

Изменение направления скрола

os:reachEnd

Достижение нижней/правой границы скрол-контейнера

os:reachStart

Достижение верхней/левой границы скрол-контейнера

os:lock

Блокировка скрола

os:unlock

Разблокировка скрола