UNPKG

infinity-forge

Version:
335 lines • 11.4 kB
"use strict"; /* 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