swiper
Version:
Most modern mobile touch slider and framework with hardware accelerated transitions
2 lines • 3.44 kB
JavaScript
import{u as now,m as elementTransitionEnd}from"../shared/utils.min.mjs";const FreeMode=({swiper:e,extendParams:t,emit:n,once:o})=>{t({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),e.freeMode={onTouchStart:function(){if(e.params.cssMode)return;const t=e.getTranslate();e.setTranslate(t),e.setTransition(0),e.touchEventsData.velocities.length=0,e.freeMode.onTouchEnd({currentPos:e.rtl?e.translate:-e.translate})},onTouchMove:function(){if(e.params.cssMode)return;const{touchEventsData:t,touches:n}=e;0===t.velocities.length&&t.velocities.push({position:n[e.isHorizontal()?"startX":"startY"],time:t.touchStartTime??now()}),t.velocities.push({position:n[e.isHorizontal()?"currentX":"currentY"],time:now()})},onTouchEnd:function({currentPos:t}){if(e.params.cssMode)return;const{wrapperEl:s,rtlTranslate:i,snapGrid:a,touchEventsData:l}=e,r=e.params,m=e.params.freeMode,c=now(),u=c-(l.touchStartTime??c);if(t<-e.minTranslate())e.slideTo(e.activeIndex);else if(t>-e.maxTranslate())e.slides.length<a.length?e.slideTo(a.length-1):e.slideTo(e.slides.length-1);else{if(m.momentum){if(l.velocities.length>1){const t=l.velocities.pop(),n=l.velocities.pop(),o=t.position-n.position,s=t.time-n.time;e.velocity=o/s,e.velocity/=2,Math.abs(e.velocity)<m.minimumVelocity&&(e.velocity=0),(s>150||now()-t.time>300)&&(e.velocity=0)}else e.velocity=0;e.velocity*=m.momentumVelocityRatio,l.velocities.length=0;let t=1e3*m.momentumRatio;const c=e.velocity*t;let u=e.translate+c;i&&(u=-u);let d,p=!1;const T=20*Math.abs(e.velocity)*m.momentumBounceRatio;let v=!1;if(u<e.maxTranslate())m.momentumBounce?(u+e.maxTranslate()<-T&&(u=e.maxTranslate()-T),d=e.maxTranslate(),p=!0,l.allowMomentumBounce=!0):u=e.maxTranslate(),r.loop&&r.centeredSlides&&(v=!0);else if(u>e.minTranslate())m.momentumBounce?(u-e.minTranslate()>T&&(u=e.minTranslate()+T),d=e.minTranslate(),p=!0,l.allowMomentumBounce=!0):u=e.minTranslate(),r.loop&&r.centeredSlides&&(v=!0);else if(m.sticky){let t=0;for(let e=0;e<a.length;e+=1)if(a[e]>-u){t=e;break}u=Math.abs(a[t]-u)<Math.abs((a[t-1]??a[t])-u)||"next"===e.swipeDirection?a[t]:a[t-1],u=-u}if(v&&o("transitionEnd",()=>{e.loopFix()}),0!==e.velocity){if(t=i?Math.abs((-u-e.translate)/e.velocity):Math.abs((u-e.translate)/e.velocity),m.sticky){const n=Math.abs((i?-u:u)-e.translate),o=e.slidesSizesGrid[e.activeIndex],s=r.speed;t=n<o?s:n<2*o?1.5*s:2.5*s}}else if(m.sticky)return void e.slideToClosest();m.momentumBounce&&p&&void 0!==d?(e.updateProgress(d),e.setTransition(t),e.setTranslate(u),e.transitionStart(!0,e.swipeDirection),e.animating=!0,elementTransitionEnd(s,()=>{e&&!e.destroyed&&l.allowMomentumBounce&&(n("momentumBounce"),e.setTransition(r.speed),setTimeout(()=>{e.setTranslate(d),elementTransitionEnd(s,()=>{e&&!e.destroyed&&e.transitionEnd()})},0))})):e.velocity?(n("_freeModeNoMomentumRelease"),e.updateProgress(u),e.setTransition(t),e.setTranslate(u),e.transitionStart(!0,e.swipeDirection),e.animating||(e.animating=!0,elementTransitionEnd(s,()=>{e&&!e.destroyed&&e.transitionEnd()}))):e.updateProgress(u),e.updateActiveIndex(),e.updateSlidesClasses()}else{if(m.sticky)return void e.slideToClosest();n("_freeModeNoMomentumRelease")}(!m.momentum||u>=r.longSwipesMs)&&(n("_freeModeStaticRelease"),e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses())}}}};export{FreeMode as default};
//# sourceMappingURL=free-mode.min.mjs.map