UNPKG

6.45 kBTypeScriptView Raw
1/**
2 * egjs-conveyer
3 * Copyright (c) 2022-present NAVER Corp.
4 * MIT license
5 */
6import { CONVEYER_METHODS } from "./consts";
7import Conveyer from "./Conveyer";
8/**
9 * @typedef
10 */
11export interface ConveyerOptions {
12 /**
13 * scroll direction. (true: Horizontal Scroll, false: Vertical Scroll)
14 * <ko>스크롤 방향. (true: 가로 스크롤, false: 세로 스크롤)</ko>
15 * @default true
16 */
17 horizontal?: boolean;
18 /**
19 * selector to find items inside.
20 * <ko>내부의 아이템들을 찾기 위한 selector.</ko>
21 * @default ""
22 */
23 itemSelector?: string;
24 /**
25 * Whether to use drag.
26 * <ko> 드래그를 사용할지 여부.</ko>
27 * @default true
28 */
29 useDrag?: boolean;
30 /**
31 * Whether to use the mouse wheel in a direction aside from the scroll direction.
32 * <ko>스크롤 방향과 다른 방향의 마우스 휠 입력을 사용할지 여부.</ko>
33 * @default false
34 */
35 useSideWheel?: boolean;
36 /**
37 * The minimum margin space for {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, and {@link Conveyer#event-leaveEnd leaveEnd} events to be triggered at the beginning and end of the scroll area.
38 * <ko> 스크롤 영역의 시작과 끝에서 {@link Conveyer#event-reachStart reachStart}, {@link Conveyer#event-leaveStart leaveStart}, {@link Conveyer#event-reachEnd reachEnd}, {@link Conveyer#event-leaveEnd leaveEnd} 이벤트들이 발생하기 위한 최소 여백.</ko>
39 * @default 0
40 */
41 boundaryMargin?: number;
42 /**
43 * The maximum amount of time the scroll event does not fire for the finishScroll event to be triggered.
44 * <ko> finishScroll 이벤트가 발생되기 위한 scroll 이벤트가 발생하지 않는 최대 시간.</ko>
45 * @default 100
46 */
47 scrollDebounce?: number;
48 /**
49 * Whether to prevent being selected.
50 * <ko>셀렉트가 되는 것을 막을지 여부.</ko>
51 * @default true
52 */
53 preventDefault?: boolean;
54 /**
55 * Whether to prevent click event when dragging.
56 * <ko>드래그하면 클릭이벤트를 막을지 여부.</ko>
57 * @default false
58 */
59 preventClickOnDrag?: boolean;
60 /**
61 * Whether to use the {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} when the user starts dragging.
62 * <ko>사용자가 드래그를 시작할 때 {@link https://developer.mozilla.org/ko/docs/Web/API/Event/preventDefault preventDefault} 실행 여부</ko>
63 * @default false
64 */
65 preventDefaultOnDrag?: boolean;
66 /**
67 * Whether to automatically initialize when an instance is created. If set to false, initialization is possible while calling the init method.
68 * <ko>인스턴스를 생성할 때 자동으로 초기화할지 여부. false로 설정하면 init 메서드를 호출하면서 초기화가 가능하다.</ko>
69 * @default true
70 */
71 autoInit?: boolean;
72 /**
73 * If this option is enabled on a Conveyer placed inside an egjs component that has the same scroll direction including the Conveyer itself. The parent component moves in the same direction after the Conveyer reaches the first/last scroll position.
74 * <ko>Conveyer 자신을 포함해서 동일한 스크롤 방향을 가진 egjs 컴포넌트 내부에 배치된 Conveyer에서 이 옵션을 활성화하면 Conveyer가 첫/마지막 스크롤 위치에 도달한 뒤부터 같은 방향으로 상위 컴포넌트가 움직인다.</ko>
75 * @default false
76 */
77 nested?: boolean;
78 /**
79 * Whether to use the {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver} when resizing the Conveyer element and ConveyerItem elements.
80 * <ko>Conveyer element와 ConveyerItem element 크기가 변경될 때 {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver} 적용 여부 </ko>
81 * @default false
82 */
83 useResizeObserver?: boolean;
84}
85/**
86 * @typedef
87 */
88export interface OnFinishScroll {
89 isWheelScroll: boolean;
90 isDragScroll: boolean;
91 isAnimationScroll: boolean;
92 isTrusted: boolean;
93}
94export interface ConveyerEvents {
95 reachStart: void;
96 reachEnd: void;
97 leaveStart: void;
98 leaveEnd: void;
99 beginScroll: void;
100 finishScroll: OnFinishScroll;
101}
102export interface ConveyerReactiveState {
103 readonly isReachStart: boolean;
104 readonly isReachEnd: boolean;
105 readonly scrollPos: number;
106}
107/**
108 * @typedef
109 */
110export interface FindItemOptions {
111 /**
112 * size ratio to find items. Use it if `padding` inside the item plays the same role as `margin` or `gap`.
113 * <ko>아이템을 찾기 위한 사이즈 비율. 아이템 내부에 `padding`이 `margin`, `gap`과 같은 역할을 한다면 사용해라.</ko>
114 * @default 1
115 */
116 hitTest?: number;
117 /**
118 * Whether to include items that intersect on the side
119 * <ko>사이드에 교차하는 아이템까지 포함할지 여부.</ko>
120 * @default 0
121 */
122 intersection?: boolean;
123 /**
124 * The number of items next to the item's index to return.
125 * <ko>해당 아이템의 index에서 얼마나 옆에 있는 아이템을 반환할지 개수.</ko>
126 * @default 0
127 */
128 sibling?: number;
129}
130/**
131 * @typedef
132 * @extends FindItemOptions
133 */
134export interface ScrollIntoViewOptions extends FindItemOptions {
135 /**
136 * The position to align the target to.
137 * <ko>target을 정렬할 위치.</ko>
138 */
139 align?: "start" | "end" | "center";
140 /**
141 * Whether to find the next item except sorting it in place.
142 * <ko>아이템을 제자리에 정렬하는 것을 제외하고 다음 아이템을 찾을지 여부.</ko>
143 * @default false
144 */
145 excludeStand?: boolean;
146 /**
147 * The value to scroll further from the sort position.
148 * <ko>정렬하는 위치에서 얼만큼 더 스크롤할 값.</ko>
149 * @default 0
150 */
151 offset?: number;
152 /**
153 * How long to scroll animation time.
154 * <ko>얼마동한 스크롤할 할지 애니메이션 시간.</ko>
155 * @default 0
156 */
157 duration?: number;
158}
159/**
160 * @typedef
161 */
162export interface ConveyerItem {
163 element?: HTMLElement | null;
164 pos: number;
165 size: number;
166}
167export declare type ConveyerMethods = {
168 [key in typeof CONVEYER_METHODS[number]]: Conveyer[key];
169};