vevet
Version:
Vevet is a JavaScript library for creative development that simplifies crafting rich interactions like split text animations, carousels, marquees, preloading, and more.
55 lines (42 loc) • 1.05 kB
text/typescript
import { Snap } from '../..';
import { SnapLogic } from '../SnapLogic';
export class SnapIdle extends SnapLogic {
/** Debounce timeout reference */
private _timeout?: NodeJS.Timeout;
constructor(snap: Snap) {
super(snap);
snap.on('update', () => this._handleUpdate(), { protected: true });
this.addDestructor(() => {
this._clear();
});
}
/** Check if idle */
get isIdle() {
const { snap } = this;
if (snap.isSwiping || snap.isInterpolating || snap.isTransitioning) {
return false;
}
return true;
}
/** Handle Snap update */
private _handleUpdate() {
this._clear();
this._timeout = setTimeout(() => {
this._handleTimeout();
}, 10);
}
/** Handle timeout action */
private _handleTimeout() {
const { snap } = this;
if (this.isIdle) {
snap.callbacks.emit('idle', undefined);
}
}
/** Clear timeout reference */
private _clear() {
if (this._timeout) {
clearTimeout(this._timeout);
this._timeout = undefined;
}
}
}