@egjs/flicking
Version:
Everyday 30 million people experience. It's reliable, flexible and extendable carousel.
186 lines (185 loc) • 7 kB
TypeScript
import { OnRelease } from "@egjs/axes";
import { DIRECTION } from "../constants/values";
import AxesController from "../control/AxesController";
import Panel from "../core/panel/Panel";
import Flicking from "../Flicking";
import { ValueOf } from "../types/internal";
/**
* Parameters for {@link Control.moveToPanel}
* @public
*/
export interface MoveToPanelParams {
/** Duration of the animation (unit: ms) */
duration: number;
/** Direction to move, only available in the {@link Flicking.circular | circular} mode */
direction?: ValueOf<typeof DIRECTION>;
/** {@link https://naver.github.io/egjs-axes/docs/api/Axes#event-release | release} event of {@link https://naver.github.io/egjs-axes/ | Axes} */
axesEvent?: OnRelease;
}
/**
* A component that manages inputs and animation of Flicking
* @public
*/
declare abstract class Control {
protected _flicking: Flicking | null;
protected _controller: AxesController;
protected _activePanel: Panel | null;
protected _nextPanel: Panel | null;
/**
* A controller that handles the {@link https://naver.github.io/egjs-axes/ | @egjs/axes} events
* @readonly
*/
get controller(): AxesController;
/**
* Index number of the {@link Flicking.currentPanel | currentPanel}
* @defaultValue 0
* @readonly
*/
get activeIndex(): number;
/**
* An active panel
* @readonly
*/
get activePanel(): Panel | null;
/**
* Whether Flicking's animating
* @readonly
*/
get animating(): boolean;
/**
* Whether user is clicking or touching
* @readonly
*/
get holding(): boolean;
constructor();
/**
* Move {@link Camera} to the given position
* @param position - The target position to move
* @param duration - Duration of the panel movement animation (unit: ms)
* @param axesEvent - {@link https://naver.github.io/egjs-axes/docs/api/Axes#event-release | release} event of {@link https://naver.github.io/egjs-axes/ | Axes}
* @fires {@link MovementEvents}
* @throws {@link MovementErrors}
* @returns A Promise which will be resolved after reaching the target position
*/
abstract moveToPosition(position: number, duration: number, axesEvent?: OnRelease): Promise<void>;
/**
* Initialize Control
* @remarks
* This method is called automatically during {@link Flicking.init}. It initializes the internal controller.
* @param flicking - An instance of {@link Flicking}
* @returns The current instance for method chaining
*/
init(flicking: Flicking): this;
/**
* Destroy Control and return to initial state
* @remarks
* This method destroys the internal controller and resets all internal values.
*/
destroy(): void;
/**
* Enable input from the user (mouse/touch)
* @remarks
* This is a shorthand for `Flicking.enableInput`.
* @returns The current instance for method chaining
*/
enable(): this;
/**
* Disable input from the user (mouse/touch)
* @remarks
* This is a shorthand for `Flicking.disableInput`.
* @returns The current instance for method chaining
*/
disable(): this;
/**
* Releases ongoing user input (mouse/touch)
* @remarks
* This method immediately releases the user's input, similar to the user lifting their finger.
* @returns The current instance for method chaining
*/
release(): this;
/**
* Change the destination and duration of the animation currently playing
* @remarks
* This method does nothing if no animation is currently playing.
* @param panel - The target panel to move
* @param duration - Duration of the animation (unit: ms)
* @param direction - Direction to move, only available in the {@link Flicking.circular | circular} mode
* @throws {@link AnimationUpdateErrors}
* @returns The current instance for method chaining
*/
updateAnimation(panel: Panel, duration?: number, direction?: ValueOf<typeof DIRECTION>): this;
/**
* Stops the animation currently playing
* @remarks
* This method does nothing if no animation is currently playing.
* @returns The current instance for method chaining
*/
stopAnimation(): this;
/**
* Update position after resizing
* @remarks
* This method moves the camera to the active panel's position after a resize operation.
* @param progressInPanel - Previous camera's progress in active panel before resize
* @throws {@link InitializationErrors}
*/
updatePosition(progressInPanel: number): void;
/**
* Update {@link Control.controller | controller}'s state
* @remarks
* This method synchronizes the controller state with the current camera parameters.
* @returns The current instance for method chaining
*/
updateInput(): this;
/**
* Reset {@link Control.activePanel | activePanel} to `null`
* @remarks
* This method is called when the active panel is removed from the renderer.
* @returns The current instance for method chaining
*/
resetActive(): this;
/**
* Move {@link Camera} to the given panel
* @param panel - The target panel to move
* @param options - {@link MoveToPanelParams}
* @fires {@link MovementEvents}
* @throws {@link MovementErrors}
* @returns A Promise which will be resolved after reaching the target panel
*/
moveToPanel(panel: Panel, { duration, direction, axesEvent }: MoveToPanelParams): Promise<void>;
/**
* @internal
* @privateRemarks
* Sets the active panel and triggers {@link ChangedEvent} or {@link RestoredEvent} based on whether the panel changed.
*/
setActive(newActivePanel: Panel, prevActivePanel: Panel | null, isTrusted: boolean): void;
/**
* @internal
* @privateRemarks
* Copies internal state from another Control instance. Used when changing moveType option.
*/
copy(control: Control): void;
/**
* @internal
* @privateRemarks
* Triggers {@link WillChangeEvent} or {@link WillRestoreEvent} based on whether the target panel differs from the active panel.
*/
protected _triggerIndexChangeEvent(panel: Panel, position: number, axesEvent?: OnRelease, direction?: ValueOf<typeof DIRECTION>): void;
/**
* @internal
* @privateRemarks
* Animates the camera to the target position and handles animation completion or interruption.
*/
protected _animateToPosition({ position, duration, newActivePanel, axesEvent }: {
position: number;
duration: number;
newActivePanel: Panel;
axesEvent?: OnRelease;
}): Promise<void>;
/**
* @internal
* @privateRemarks
* Calculates the target position for a panel, considering circular mode and direction constraints.
*/
private _getPosition;
}
export default Control;