swiper
Version:
Most modern mobile touch slider and framework with hardware accelerated transitions
2 lines • 4.09 kB
JavaScript
const Autoplay=({swiper:e,extendParams:t,on:a,emit:n,params:i})=>{function o(){return e.params.autoplay}e.autoplay={running:!1,paused:!1,timeLeft:0},t({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!1,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}});const r="object"==typeof i.autoplay&&i.autoplay&&"number"==typeof i.autoplay.delay?i.autoplay.delay:3e3;let s,u,l,d=r,p=r,y=0,m=(new Date).getTime(),c=!1,v=!1,g=!1,f=!1,T=!1;function b(t){if(!e||e.destroyed||!e.wrapperEl)return;if(t.target!==e.wrapperEl)return;e.wrapperEl.removeEventListener("transitionend",b);const a=t.detail;T||a&&a.bySwiperTouchMove||A()}const w=()=>{if(e.destroyed||!e.autoplay.running)return;e.autoplay.paused?c=!0:c&&(p=y,c=!1);const t=e.autoplay.paused?y:m+p-(new Date).getTime();e.autoplay.timeLeft=t,n("autoplayTimeLeft",t,t/d),u=requestAnimationFrame(()=>{w()})},E=()=>{let t=o().delay;const a=(()=>{let t;const a=!!e.params.virtual?.enabled;if(t=e.virtual&&a?e.slides.find(e=>e.classList.contains("swiper-slide-active")):e.slides[e.activeIndex],!t)return;const n=t.getAttribute("data-swiper-autoplay");return null!=n?parseInt(n,10):void 0})();return"number"==typeof a&&!Number.isNaN(a)&&a>0&&(t=a),t},L=t=>{if(e.destroyed||!e.autoplay.running)return 0;void 0!==u&&cancelAnimationFrame(u),w();let a=t;void 0===a&&(a=E(),d=a,p=a),y=a;const i=e.params.speed,r=()=>{if(!e||e.destroyed)return;const t=o();t.reverseDirection?!e.isBeginning||e.params.loop||e.params.rewind?(e.slidePrev(i,!0,!0),n("autoplay")):t.stopOnLastSlide||(e.slideTo(e.slides.length-1,i,!0,!0),n("autoplay")):!e.isEnd||e.params.loop||e.params.rewind?(e.slideNext(i,!0,!0),n("autoplay")):t.stopOnLastSlide||(e.slideTo(0,i,!0,!0),n("autoplay")),e.params.cssMode&&(m=(new Date).getTime(),requestAnimationFrame(()=>{L()}))};return a>0?(void 0!==s&&clearTimeout(s),s=setTimeout(()=>{r()},a)):requestAnimationFrame(()=>{r()}),a},O=()=>(m=(new Date).getTime(),e.autoplay.running=!0,L(),n("autoplayStart"),!0),S=()=>(e.autoplay.running=!1,void 0!==s&&clearTimeout(s),void 0!==u&&cancelAnimationFrame(u),n("autoplayStop"),!0),M=(t,a)=>{if(e.destroyed||!e.autoplay.running)return;void 0!==s&&clearTimeout(s),t||(f=!0);const i=()=>{n("autoplayPause"),o().waitForTransition?e.wrapperEl.addEventListener("transitionend",b):A()};if(e.autoplay.paused=!0,a)return void i();const r=y||o().delay;y=r-((new Date).getTime()-m),e.isEnd&&y<0&&!e.params.loop||(y<0&&(y=0),i())},A=()=>{e.isEnd&&y<0&&!e.params.loop||e.destroyed||!e.autoplay.running||(m=(new Date).getTime(),f?(f=!1,L(y)):L(),e.autoplay.paused=!1,n("autoplayResume"))},D=()=>{!e.destroyed&&e.autoplay.running&&("hidden"===document.visibilityState&&(f=!0,M(!0)),"visible"===document.visibilityState&&A())},F=t=>{"mouse"===t.pointerType&&(f=!0,T=!0,e.animating||e.autoplay.paused||M(!0))},h=t=>{"mouse"===t.pointerType&&(T=!1,e.autoplay.paused&&A())};a("init",()=>{o().enabled&&(o().pauseOnMouseEnter&&(e.el.addEventListener("pointerenter",F),e.el.addEventListener("pointerleave",h)),document.addEventListener("visibilitychange",D),O())}),a("destroy",()=>{e.el&&"string"!=typeof e.el&&(e.el.removeEventListener("pointerenter",F),e.el.removeEventListener("pointerleave",h)),document.removeEventListener("visibilitychange",D),e.autoplay.running&&S()}),a("_freeModeStaticRelease",()=>{(g||f)&&A()}),a("_freeModeNoMomentumRelease",()=>{o().disableOnInteraction?S():M(!0,!0)}),a("beforeTransitionStart",(t,a,n)=>{!e.destroyed&&e.autoplay.running&&(n||!o().disableOnInteraction?M(!0,!0):S())}),a("sliderFirstMove",()=>{!e.destroyed&&e.autoplay.running&&(o().disableOnInteraction?S():(v=!0,g=!1,f=!1,l=setTimeout(()=>{f=!0,g=!0,M(!0)},200)))}),a("touchEnd",()=>{if(!e.destroyed&&e.autoplay.running&&v){if(void 0!==l&&clearTimeout(l),void 0!==s&&clearTimeout(s),o().disableOnInteraction)return g=!1,void(v=!1);g&&e.params.cssMode&&A(),g=!1,v=!1}}),a("slideChange",()=>{!e.destroyed&&e.autoplay.running&&e.autoplay.paused&&(y=E(),d=E())}),Object.assign(e.autoplay,{start:O,stop:S,pause:M,resume:A})};export{Autoplay as default};
//# sourceMappingURL=autoplay.min.mjs.map