41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
export default function loopFix() {
|
|
const swiper = this;
|
|
swiper.emit('beforeLoopFix');
|
|
const {
|
|
activeIndex,
|
|
slides,
|
|
loopedSlides,
|
|
allowSlidePrev,
|
|
allowSlideNext,
|
|
snapGrid,
|
|
rtlTranslate: rtl
|
|
} = swiper;
|
|
let newIndex;
|
|
swiper.allowSlidePrev = true;
|
|
swiper.allowSlideNext = true;
|
|
const snapTranslate = -snapGrid[activeIndex];
|
|
const diff = snapTranslate - swiper.getTranslate();
|
|
|
|
if (activeIndex < loopedSlides) {
|
|
newIndex = slides.length - loopedSlides * 3 + activeIndex;
|
|
newIndex += loopedSlides;
|
|
const slideChanged = swiper.slideTo(newIndex, 0, false, true);
|
|
|
|
if (slideChanged && diff !== 0) {
|
|
swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
|
|
}
|
|
} else if (activeIndex >= slides.length - loopedSlides) {
|
|
newIndex = -slides.length + activeIndex + loopedSlides;
|
|
newIndex += loopedSlides;
|
|
const slideChanged = swiper.slideTo(newIndex, 0, false, true);
|
|
|
|
if (slideChanged && diff !== 0) {
|
|
swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
|
|
}
|
|
}
|
|
|
|
swiper.allowSlidePrev = allowSlidePrev;
|
|
swiper.allowSlideNext = allowSlideNext;
|
|
swiper.emit('loopFix');
|
|
}
|