swiper
Version:
Most modern mobile touch slider and framework with hardware accelerated transitions
2 lines • 2.17 kB
JavaScript
function Grid({swiper:e,extendParams:i,on:r}){let a,t,s,l;i({grid:{rows:1,fill:"column"}});const o=()=>{let i=e.params.spaceBetween;return"string"==typeof i&&i.indexOf("%")>=0?i=parseFloat(i.replace("%",""))/100*e.size:"string"==typeof i&&(i=parseFloat(i)),i};r("init",()=>{l=e.params.grid&&e.params.grid.rows>1}),r("update",()=>{const{params:i,el:r}=e,a=i.grid&&i.grid.rows>1;l&&!a?(r.classList.remove(`${i.containerModifierClass}grid`,`${i.containerModifierClass}grid-column`),s=1,e.emitContainerClasses()):!l&&a&&(r.classList.add(`${i.containerModifierClass}grid`),"column"===i.grid.fill&&r.classList.add(`${i.containerModifierClass}grid-column`),e.emitContainerClasses()),l=a}),e.grid={initSlides:i=>{const{slidesPerView:r}=e.params,{rows:l,fill:o}=e.params.grid,n=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:i.length;s=Math.floor(n/l),a=Math.floor(n/l)===n/l?n:Math.ceil(n/l)*l,"auto"!==r&&"row"===o&&(a=Math.max(a,r*l)),t=a/l},unsetSlides:()=>{e.slides&&e.slides.forEach(i=>{i.swiperSlideGridSet&&(i.style.height="",i.style[e.getDirectionLabel("margin-top")]="")})},updateSlide:(i,r,l)=>{const{slidesPerGroup:n}=e.params,d=o(),{rows:p,fill:c}=e.params.grid,g=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:l.length;let u,h,m;if("row"===c&&n>1){const e=Math.floor(i/(n*p)),t=i-p*n*e,s=0===e?n:Math.min(Math.ceil((g-e*p*n)/p),n);m=Math.floor(t/s),h=t-m*s+e*n,u=h+m*a/p,r.style.order=u}else"column"===c?(h=Math.floor(i/p),m=i-h*p,(h>s||h===s&&m===p-1)&&(m+=1,m>=p&&(m=0,h+=1))):(m=Math.floor(i/t),h=i-m*t);r.row=m,r.column=h,r.style.height=`calc((100% - ${(p-1)*d}px) / ${p})`,r.style[e.getDirectionLabel("margin-top")]=0!==m?d&&`${d}px`:"",r.swiperSlideGridSet=!0},updateWrapperSize:(i,r)=>{const{centeredSlides:t,roundLengths:s}=e.params,l=o(),{rows:n}=e.params.grid;if(e.virtualSize=(i+l)*a,e.virtualSize=Math.ceil(e.virtualSize/n)-l,e.params.cssMode||(e.wrapperEl.style[e.getDirectionLabel("width")]=`${e.virtualSize+l}px`),t){const i=[];for(let a=0;a<r.length;a+=1){let t=r[a];s&&(t=Math.floor(t)),r[a]<e.virtualSize+r[0]&&i.push(t)}r.splice(0,r.length),r.push(...i)}}}}export{Grid as default};
//# sourceMappingURL=grid.min.mjs.map