@better-scroll/scroll-bar
Version:
scrollbar is used to BetterScroll, which behaves like browser scrollbar
83 lines (82 loc) • 2.52 kB
TypeScript
import BScroll, { TranslaterPoint } from '@better-scroll/core';
import { EventEmitter, EventRegister } from '@better-scroll/shared-utils';
import EventHandler from './event-handler';
export declare const enum IndicatorDirection {
Horizontal = "horizontal",
Vertical = "vertical"
}
export declare const enum OffsetType {
Step = "step",
Point = "clickedPoint"
}
export interface IndicatorOptions {
wrapper: HTMLElement;
direction: IndicatorDirection;
fade: boolean;
fadeInTime: number;
fadeOutTime: number;
interactive: boolean;
minSize: number;
isCustom: boolean;
scrollbarTrackClickable: boolean;
scrollbarTrackOffsetType: OffsetType;
scrollbarTrackOffsetTime: number;
}
interface KeysMap {
hasScroll: 'hasVerticalScroll' | 'hasHorizontalScroll';
size: 'height' | 'width';
wrapperSize: 'clientHeight' | 'clientWidth';
scrollerSize: 'scrollerHeight' | 'scrollerWidth';
maxScrollPos: 'maxScrollY' | 'maxScrollX';
pos: 'y' | 'x';
point: 'pageX' | 'pageY';
translateProperty: 'translateY' | 'translateX';
domRect: 'top' | 'left';
}
interface ScrollInfo {
maxScrollPos: number;
minScrollPos: number;
sizeRatio: number;
baseSize: number;
}
export default class Indicator {
scroll: BScroll;
options: IndicatorOptions;
wrapper: HTMLElement;
wrapperRect: DOMRect;
indicatorEl: HTMLElement;
direction: IndicatorDirection;
scrollInfo: ScrollInfo;
currentPos: number;
moved: boolean;
startTime: number;
keysMap: KeysMap;
eventHandler: EventHandler;
clickEventRegister: EventRegister;
hooksFn: [EventEmitter, string, Function][];
constructor(scroll: BScroll, options: IndicatorOptions);
private handleFade;
private handleHooks;
private registerHooks;
private bindClick;
private handleClick;
private calculateclickOffsetPos;
getKeysMap(): KeysMap;
fade(visible?: boolean): void;
refresh(): void;
transitionTime(time?: number): void;
transitionTimingFunction(easing: string): void;
private canScroll;
private refreshScrollInfo;
updatePosition(point: TranslaterPoint): void;
private caculatePosAndSize;
private refreshStyle;
startHandler(): void;
moveHandler(delta: number): void;
endHandler(): void;
private indicatorNotMoved;
private syncBScroll;
private newPos;
destroy(): void;
}
export {};