UNPKG

swiper

Version:

Most modern mobile touch slider and framework with hardware accelerated transitions

2 lines 2.88 kB
import{n as nextTick,l as elementTransitionEnd}from"../shared/utils.min.mjs";function Controller({swiper:t,extendParams:r,on:n}){function e(t,r){const n=function(){let t,r,n;return(e,o)=>{for(r=-1,t=e.length;t-r>1;)n=t+r>>1,e[n]<=o?r=n:t=n;return t}}();let e,o;return this.x=t,this.y=r,this.lastIndex=t.length-1,this.interpolate=function(t){return t?(o=n(this.x,t),e=o-1,(t-this.x[e])*(this.y[o]-this.y[e])/(this.x[o]-this.x[e])+this.y[e]):0},this}function o(){t.controller.control&&t.controller.spline&&(t.controller.spline=void 0,delete t.controller.spline)}r({controller:{control:void 0,inverse:!1,by:"slide"}}),t.controller={control:void 0},n("beforeInit",()=>{if("undefined"!=typeof window&&("string"==typeof t.params.controller.control||t.params.controller.control instanceof HTMLElement)){return void("string"==typeof t.params.controller.control?[...document.querySelectorAll(t.params.controller.control)]:[t.params.controller.control]).forEach(r=>{if(t.controller.control||(t.controller.control=[]),r&&r.swiper)t.controller.control.push(r.swiper);else if(r){const n=`${t.params.eventsPrefix}init`,e=o=>{t.controller.control.push(o.detail[0]),t.update(),r.removeEventListener(n,e)};r.addEventListener(n,e)}})}t.controller.control=t.params.controller.control}),n("update",()=>{o()}),n("resize",()=>{o()}),n("observerUpdate",()=>{o()}),n("setTranslate",(r,n,e)=>{t.controller.control&&!t.controller.control.destroyed&&t.controller.setTranslate(n,e)}),n("setTransition",(r,n,e)=>{t.controller.control&&!t.controller.control.destroyed&&t.controller.setTransition(n,e)}),Object.assign(t.controller,{setTranslate:function(r,n){const o=t.controller.control;let l,s;const i=t.constructor;function a(r){if(r.destroyed)return;const n=t.rtlTranslate?-t.translate:t.translate;"slide"===t.params.controller.by&&(!function(r){t.controller.spline=t.params.loop?new e(t.slidesGrid,r.slidesGrid):new e(t.snapGrid,r.snapGrid)}(r),s=-t.controller.spline.interpolate(-n)),s&&"container"!==t.params.controller.by||(l=(r.maxTranslate()-r.minTranslate())/(t.maxTranslate()-t.minTranslate()),!Number.isNaN(l)&&Number.isFinite(l)||(l=1),s=(n-t.minTranslate())*l+r.minTranslate()),t.params.controller.inverse&&(s=r.maxTranslate()-s),r.updateProgress(s),r.setTranslate(s,t),r.updateActiveIndex(),r.updateSlidesClasses()}if(Array.isArray(o))for(let t=0;t<o.length;t+=1)o[t]!==n&&o[t]instanceof i&&a(o[t]);else o instanceof i&&n!==o&&a(o)},setTransition:function(r,n){const e=t.constructor,o=t.controller.control;let l;function s(n){n.destroyed||(n.setTransition(r,t),0!==r&&(n.transitionStart(),n.params.autoHeight&&nextTick(()=>{n.updateAutoHeight()}),elementTransitionEnd(n.wrapperEl,()=>{o&&n.transitionEnd()})))}if(Array.isArray(o))for(l=0;l<o.length;l+=1)o[l]!==n&&o[l]instanceof e&&s(o[l]);else o instanceof e&&n!==o&&s(o)}})}export{Controller as default}; //# sourceMappingURL=controller.min.mjs.map