vevet
Version:
Vevet is a JavaScript library for creative development that simplifies crafting rich interactions like split text animations, carousels, marquees, preloading, and more.
53 lines • 1.48 kB
JavaScript
import { isFiniteNumber } from '../../../../internal/isFiniteNumber';
import { SnapLogic } from '../SnapLogic';
export class SnapInterval extends SnapLogic {
constructor(snap) {
super(snap);
snap.on('update', () => this._handleUpdate(), { protected: true });
this.addDestructor(() => {
this._clearInterval();
});
}
get allowInterval() {
const { snap } = this;
if (snap.isSwiping ||
snap.hasInteria ||
snap.isTransitioning ||
snap.isInterpolating ||
!isFiniteNumber(snap.props.interval)) {
return false;
}
return true;
}
/** Handle Snap update */
_handleUpdate() {
const { snap } = this;
if (!this.allowInterval) {
this._clearInterval();
return;
}
if (!this._interval) {
this._interval = setInterval(() => {
this._handleInterval();
}, snap.props.interval);
}
}
/** Handle interval action */
_handleInterval() {
const { snap } = this;
if (snap.props.intervalDirection === 'prev') {
snap.prev();
}
else {
snap.next();
}
}
/** Clear interval */
_clearInterval() {
if (this._interval) {
clearInterval(this._interval);
this._interval = undefined;
}
}
}
//# sourceMappingURL=index.js.map