infinity-forge
Version:
335 lines • 11.4 kB
JavaScript
;
/* eslint no-underscore-dangle: "off" */
/* eslint no-use-before-define: "off" */
Object.defineProperty(exports, "__esModule", { value: true });
exports.Autoplay = Autoplay;
var document_1 = require("../ssr-window/document.js");
function Autoplay(_a) {
var swiper = _a.swiper, extendParams = _a.extendParams, on = _a.on, emit = _a.emit, params = _a.params;
swiper.autoplay = {
running: false,
paused: false,
timeLeft: 0,
};
extendParams({
autoplay: {
enabled: false,
delay: 3000,
waitForTransition: true,
disableOnInteraction: false,
stopOnLastSlide: false,
reverseDirection: false,
pauseOnMouseEnter: false,
},
});
var timeout;
var raf;
var autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;
var autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;
var autoplayTimeLeft;
var autoplayStartTime = new Date().getTime();
var wasPaused;
var isTouched;
var pausedByTouch;
var touchStartTimeout;
var slideChanged;
var pausedByInteraction;
var pausedByPointerEnter;
function onTransitionEnd(e) {
if (!swiper || swiper.destroyed || !swiper.wrapperEl)
return;
if (e.target !== swiper.wrapperEl)
return;
swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);
if (pausedByPointerEnter || (e.detail && e.detail.bySwiperTouchMove)) {
return;
}
resume();
}
var calcTimeLeft = function () {
if (swiper.destroyed || !swiper.autoplay.running)
return;
if (swiper.autoplay.paused) {
wasPaused = true;
}
else if (wasPaused) {
autoplayDelayCurrent = autoplayTimeLeft;
wasPaused = false;
}
var timeLeft = swiper.autoplay.paused
? autoplayTimeLeft
: autoplayStartTime + autoplayDelayCurrent - new Date().getTime();
swiper.autoplay.timeLeft = timeLeft;
emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);
raf = requestAnimationFrame(function () {
calcTimeLeft();
});
};
var getSlideDelay = function () {
var activeSlideEl;
if (swiper.virtual && swiper.params.virtual.enabled) {
activeSlideEl = swiper.slides.filter(function (slideEl) {
return slideEl.classList.contains('swiper-slide-active');
})[0];
}
else {
activeSlideEl = swiper.slides[swiper.activeIndex];
}
if (!activeSlideEl)
return undefined;
var currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);
return currentSlideDelay;
};
var run = function (delayForce) {
if (swiper.destroyed || !swiper.autoplay.running)
return;
cancelAnimationFrame(raf);
calcTimeLeft();
var delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;
autoplayDelayTotal = swiper.params.autoplay.delay;
autoplayDelayCurrent = swiper.params.autoplay.delay;
var currentSlideDelay = getSlideDelay();
if (!Number.isNaN(currentSlideDelay) &&
currentSlideDelay > 0 &&
typeof delayForce === 'undefined') {
delay = currentSlideDelay;
autoplayDelayTotal = currentSlideDelay;
autoplayDelayCurrent = currentSlideDelay;
}
autoplayTimeLeft = delay;
var speed = swiper.params.speed;
var proceed = function () {
if (!swiper || swiper.destroyed)
return;
if (swiper.params.autoplay.reverseDirection) {
if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {
swiper.slidePrev(speed, true, true);
emit('autoplay');
}
else if (!swiper.params.autoplay.stopOnLastSlide) {
swiper.slideTo(swiper.slides.length - 1, speed, true, true);
emit('autoplay');
}
}
else {
if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {
swiper.slideNext(speed, true, true);
emit('autoplay');
}
else if (!swiper.params.autoplay.stopOnLastSlide) {
swiper.slideTo(0, speed, true, true);
emit('autoplay');
}
}
if (swiper.params.cssMode) {
autoplayStartTime = new Date().getTime();
requestAnimationFrame(function () {
run(undefined);
});
}
};
if (delay > 0) {
clearTimeout(timeout);
timeout = setTimeout(function () {
proceed();
}, delay);
}
else {
requestAnimationFrame(function () {
proceed();
});
}
// eslint-disable-next-line
return delay;
};
var start = function () {
autoplayStartTime = new Date().getTime();
swiper.autoplay.running = true;
run(undefined);
emit('autoplayStart');
};
var stop = function () {
swiper.autoplay.running = false;
clearTimeout(timeout);
cancelAnimationFrame(raf);
emit('autoplayStop');
};
var pause = function (internal, reset) {
if (swiper.destroyed || !swiper.autoplay.running)
return;
clearTimeout(timeout);
if (!internal) {
pausedByInteraction = true;
}
var proceed = function () {
emit('autoplayPause');
if (swiper.params.autoplay.waitForTransition) {
swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);
}
else {
resume();
}
};
swiper.autoplay.paused = true;
if (reset) {
if (slideChanged) {
autoplayTimeLeft = swiper.params.autoplay.delay;
}
slideChanged = false;
proceed();
return;
}
var delay = autoplayTimeLeft || swiper.params.autoplay.delay;
autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);
if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop)
return;
if (autoplayTimeLeft < 0)
autoplayTimeLeft = 0;
proceed();
};
var resume = function () {
if ((swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) ||
swiper.destroyed ||
!swiper.autoplay.running)
return;
autoplayStartTime = new Date().getTime();
if (pausedByInteraction) {
pausedByInteraction = false;
run(autoplayTimeLeft);
}
else {
run(undefined);
}
swiper.autoplay.paused = false;
emit('autoplayResume');
};
var onVisibilityChange = function () {
if (swiper.destroyed || !swiper.autoplay.running)
return;
var document = (0, document_1.getDocument)();
if (document.visibilityState === 'hidden') {
pausedByInteraction = true;
pause(true, undefined);
}
if (document.visibilityState === 'visible') {
resume();
}
};
var onPointerEnter = function (e) {
if (e.pointerType !== 'mouse')
return;
pausedByInteraction = true;
pausedByPointerEnter = true;
if (swiper.animating || swiper.autoplay.paused)
return;
pause(true, undefined);
};
var onPointerLeave = function (e) {
if (e.pointerType !== 'mouse')
return;
pausedByPointerEnter = false;
if (swiper.autoplay.paused) {
resume();
}
};
var attachMouseEvents = function () {
if (swiper.params.autoplay.pauseOnMouseEnter) {
swiper.el.addEventListener('pointerenter', onPointerEnter);
swiper.el.addEventListener('pointerleave', onPointerLeave);
}
};
var detachMouseEvents = function () {
if (swiper.el && typeof swiper.el !== 'string') {
swiper.el.removeEventListener('pointerenter', onPointerEnter);
swiper.el.removeEventListener('pointerleave', onPointerLeave);
}
};
var attachDocumentEvents = function () {
var document = (0, document_1.getDocument)();
document.addEventListener('visibilitychange', onVisibilityChange);
};
var detachDocumentEvents = function () {
var document = (0, document_1.getDocument)();
document.removeEventListener('visibilitychange', onVisibilityChange);
};
on('init', function () {
if (swiper.params.autoplay.enabled) {
attachMouseEvents();
attachDocumentEvents();
start();
}
});
on('destroy', function () {
detachMouseEvents();
detachDocumentEvents();
if (swiper.autoplay.running) {
stop();
}
});
on('_freeModeStaticRelease', function () {
if (pausedByTouch || pausedByInteraction) {
resume();
}
});
on('_freeModeNoMomentumRelease', function () {
if (!swiper.params.autoplay.disableOnInteraction) {
pause(true, true);
}
else {
stop();
}
});
on('beforeTransitionStart', function (_s, speed, internal) {
if (swiper.destroyed || !swiper.autoplay.running)
return;
if (internal || !swiper.params.autoplay.disableOnInteraction) {
pause(true, true);
}
else {
stop();
}
});
on('sliderFirstMove', function () {
if (swiper.destroyed || !swiper.autoplay.running)
return;
if (swiper.params.autoplay.disableOnInteraction) {
stop();
return;
}
isTouched = true;
pausedByTouch = false;
pausedByInteraction = false;
touchStartTimeout = setTimeout(function () {
pausedByInteraction = true;
pausedByTouch = true;
pause(true, undefined);
}, 200);
});
on('touchEnd', function () {
if (swiper.destroyed || !swiper.autoplay.running || !isTouched)
return;
clearTimeout(touchStartTimeout);
clearTimeout(timeout);
if (swiper.params.autoplay.disableOnInteraction) {
pausedByTouch = false;
isTouched = false;
return;
}
if (pausedByTouch && swiper.params.cssMode)
resume();
pausedByTouch = false;
isTouched = false;
});
on('slideChange', function () {
if (swiper.destroyed || !swiper.autoplay.running)
return;
slideChanged = true;
});
Object.assign(swiper.autoplay, {
start: start,
stop: stop,
pause: pause,
resume: resume,
});
}
//# sourceMappingURL=autoplay.js.map