diff --git a/src/components/core/core-class.js b/src/components/core/core-class.js index 99f945f58..91c74c00a 100644 --- a/src/components/core/core-class.js +++ b/src/components/core/core-class.js @@ -108,6 +108,13 @@ class Swiper { swiper.originalParams = extend({}, swiper.params); swiper.passedParams = extend({}, params); + // Backward compatibility + if (swiper.params.snapTo === 'center') { + swiper.params.centeredSlides = true; + } else { + swiper.params.centeredSlides = false; + } + // add event listeners if (swiper.params && swiper.params.on) { Object.keys(swiper.params.on).forEach((eventName) => { diff --git a/src/components/core/defaults.js b/src/components/core/defaults.js index 100cf4aad..a72a50390 100644 --- a/src/components/core/defaults.js +++ b/src/components/core/defaults.js @@ -54,6 +54,7 @@ export default { slidesPerColumnFill: 'column', slidesPerGroup: 1, slidesPerGroupSkip: 0, + snapTo: 'start', centeredSlides: false, centeredSlidesBounds: false, slidesOffsetBefore: 0, // in px diff --git a/src/components/core/update/updateSlides.js b/src/components/core/update/updateSlides.js index 10807be1e..f832f95da 100644 --- a/src/components/core/update/updateSlides.js +++ b/src/components/core/update/updateSlides.js @@ -92,12 +92,12 @@ export default function updateSlides() { groupIndex === 0 ? params.slidesPerGroup : Math.min( - Math.ceil( - (slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / - slidesPerColumn, - ), - params.slidesPerGroup, - ); + Math.ceil( + (slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / + slidesPerColumn, + ), + params.slidesPerGroup, + ); row = Math.floor(slideIndexInGroup / columnsInGroup); column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup; @@ -194,7 +194,19 @@ export default function updateSlides() { } slidesSizesGrid.push(slideSize); - if (params.centeredSlides) { + if (params.snapTo === 'end') { + if (i !== 0) slidePosition = slidePosition + slideSize + spaceBetween; + if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; + if (params.roundLengths) slidePosition = Math.floor(slidePosition); + if ( + (index - Math.min(swiper.params.slidesPerGroupSkip, index)) % + swiper.params.slidesPerGroup === + 0 + ) + snapGrid.push(Math.max(slidePosition - swiperSize, 0)); + slidesGrid.push(Math.max(slidePosition - swiperSize, 0)); + if (i === 0) slidePosition = slidePosition + slideSize + spaceBetween; + } else if (params.centeredSlides) { slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; @@ -207,7 +219,7 @@ export default function updateSlides() { if (params.roundLengths) slidePosition = Math.floor(slidePosition); if ( (index - Math.min(swiper.params.slidesPerGroupSkip, index)) % - swiper.params.slidesPerGroup === + swiper.params.slidesPerGroup === 0 ) snapGrid.push(slidePosition); diff --git a/src/react/params-list.js b/src/react/params-list.js index ed04fd05e..5051fb28a 100644 --- a/src/react/params-list.js +++ b/src/react/params-list.js @@ -33,6 +33,7 @@ const paramsList = [ '_slidesPerColumnFill', '_slidesPerGroup', '_slidesPerGroupSkip', + '_snapTo', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore',