UNPKG

vevet

Version:

Vevet is a JavaScript library for creative development that simplifies crafting rich interactions like split text animations, carousels, marquees, preloading, and more.

54 lines (43 loc) 1.15 kB
import { SnapLogic } from '..'; import { Snap } from '../..'; import { IDLE_DEBOUNCE, WHEEL_DEBOUNCE } from '../../props'; export class SnapIdle extends SnapLogic { /** Debounce timeout reference */ private _timeout?: NodeJS.Timeout; constructor(ctx: Snap) { super(ctx); this.callbacks.on('update', () => this._handleUpdate(), { protected: true, }); this.addDestructor(() => this._clear()); } /** Check if idle */ get isIdle() { return ( !this.isSwiping && !this.hasInertia && !this.isInterpolating && !this.isTransitioning && !this.isWheeling ); } /** Handle Snap update */ private _handleUpdate() { this._clear(); const debounce = Math.max(IDLE_DEBOUNCE, WHEEL_DEBOUNCE) + 10; this._timeout = setTimeout(() => this._handleTimeout(), debounce); } /** Handle timeout action */ private _handleTimeout() { if (this.isIdle) { this.callbacks.emit('idle', undefined); } } /** Clear timeout reference */ private _clear() { if (this._timeout) { clearTimeout(this._timeout); this._timeout = undefined; } } }