only-scrollbar
Version:
98 lines (97 loc) • 4.26 kB
TypeScript
import { Attributes, ClassNames, Direction, ElementOrSelector, OnlyScrollbarEvents, OnlyScrollbarOptions } from "./types";
declare class OnlyScrollbar {
/**
* @description Объект со всеми css-классами, которые используются в скроле
*/
static ClassNames: ClassNames;
static Attributes: Attributes;
static Events: {
readonly start: "os:start";
readonly stop: "os:stop";
readonly change: "os:change";
readonly reachEnd: "os:reachEnd";
readonly reachStart: "os:reachStart";
readonly lock: "os:lock";
readonly unlock: "os:unlock";
};
/**
* @description HTML-элемент, который будет являться контейнером для скрола
* @description Для корректной работы размеры контейнера должны быть ограничены
*/
readonly scrollContainer: HTMLElement;
/**
* @description HTML-элемент, на который будут применяться все события
* @default OnlyScrollbar.scrollContainer
*/
readonly eventContainer: HTMLElement | Window;
readonly options: Required<OnlyScrollbarOptions>;
/**
* @description Состояние, отображающее блокировку скрола
*/
isLocked: boolean;
position: number;
isStart: boolean;
isEnd: boolean;
isScrolling: boolean;
private targetPosition;
private prevTickTime;
private lastPosition;
private syncTo?;
private rafID;
private lastDirection;
private fields;
constructor(element: ElementOrSelector | null | undefined, options?: OnlyScrollbarOptions);
/**
* @description Последнее направление скрола в числовом представлении
* @description 1 = Forward, -1 = Back
*/
get direction(): Direction;
/**
* Остановка анимации скрола на текущей позиции
*/
stop(): void;
/**
* @description Плавный скрол до конкретной позиции, с применением стандартных расчетов для вычисления промежуточных значений
* @param position
*/
scrollTo(position: number): void;
scrollIntoView(element: HTMLElement, offset?: number): void;
/**
* @description Установка конкретного значения скрол позиции, без применения каких-либо анимаций
* @param value {number} - Числовое значение целевой позиции скрола
*/
setValue(value: number): void;
/**
* @description Блокирует скрол
* @description Блокировка также прервет запущенные процессы по перерасчету позиции
*/
lock(): void;
/**
* @description Разблокирует скрол, запускает перерасчет позиции скрола
*/
unlock(): void;
addEventListener(type: OnlyScrollbarEvents | keyof HTMLElementEventMap, listener: EventListenerOrEventListenerObject, options?: AddEventListenerOptions): void;
removeEventListener(type: OnlyScrollbarEvents | keyof HTMLElementEventMap, listener: EventListenerOrEventListenerObject): void;
destroy(): void;
private init;
/** @todo: Проверить. В логике были ошибки, если передать eventContainer */
private initEvents;
private handleCustomAnchors;
private handleNativeAnchors;
private onScroll;
private onWheel;
private overscrollPropagation;
private wheelCalculate;
private setTargetPosition;
/**
* @description Обновление направления скрола. Также устанавливает на scrollContainer атрибут data-os-direction
*/
private updateDirection;
private toggleDirectionAttr;
private tick;
private onFirstTick;
private sync;
private checkSyncTo;
private checkEdges;
}
export default OnlyScrollbar;