diff --git a/src/core/defaults.mjs b/src/core/defaults.mjs index 740a3d622..aaee96eb1 100644 --- a/src/core/defaults.mjs +++ b/src/core/defaults.mjs @@ -58,6 +58,7 @@ export default { slidesOffsetAfter: 0, // in px normalizeSlideIndex: true, centerInsufficientSlides: false, + alignSlides: false, // Disable swiper and hide navigation when container not overflow watchOverflow: true, diff --git a/src/core/update/updateSlides.mjs b/src/core/update/updateSlides.mjs index 6cbc8b483..e22f89fe1 100644 --- a/src/core/update/updateSlides.mjs +++ b/src/core/update/updateSlides.mjs @@ -195,21 +195,27 @@ export default function updateSlides() { // Remove last grid elements depending on width if (!params.centeredSlides) { + const minVisible = Math.floor(params.slidesPerView); + const lastAllowedSnapIndex = Math.max(slidesLength - minVisible, 0); + const newSlidesGrid = []; for (let i = 0; i < snapGrid.length; i += 1) { let slidesGridItem = snapGrid[i]; if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); - if (snapGrid[i] <= swiper.virtualSize - swiperSize) { + + /* keep this snap iff its *slide index* ≤ lastAllowedSnapIndex */ + if (i <= lastAllowedSnapIndex && params.alignSlides) { + newSlidesGrid.push(slidesGridItem); + } + else if (snapGrid[i] <= swiper.virtualSize - swiperSize) { newSlidesGrid.push(slidesGridItem); } } snapGrid = newSlidesGrid; - if ( - Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > - 1 - ) { - snapGrid.push(swiper.virtualSize - swiperSize); + if ((Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) + && !params.alignSlides) { + snapGrid.push(swiper.virtualSize - swiperSize); } } if (isVirtual && params.loop) {