103 lines
3.0 KiB
JavaScript
103 lines
3.0 KiB
JavaScript
export default function updateActiveIndex(newActiveIndex) {
|
|
const swiper = this;
|
|
const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
|
|
const {
|
|
slidesGrid,
|
|
snapGrid,
|
|
params,
|
|
activeIndex: previousIndex,
|
|
realIndex: previousRealIndex,
|
|
snapIndex: previousSnapIndex
|
|
} = swiper;
|
|
let activeIndex = newActiveIndex;
|
|
let snapIndex;
|
|
|
|
if (typeof activeIndex === 'undefined') {
|
|
for (let i = 0; i < slidesGrid.length; i += 1) {
|
|
if (typeof slidesGrid[i + 1] !== 'undefined') {
|
|
if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) /
|
|
2) {
|
|
activeIndex = i;
|
|
} else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
|
|
activeIndex = i + 1;
|
|
}
|
|
} else if (translate >= slidesGrid[i]) {
|
|
activeIndex = i;
|
|
}
|
|
} // Normalize slideIndex
|
|
|
|
|
|
if (params.normalizeSlideIndex) {
|
|
if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
|
|
}
|
|
|
|
}
|
|
|
|
if (snapGrid.indexOf(translate) >= 0) {
|
|
snapIndex = snapGrid.indexOf(translate);
|
|
} else {
|
|
const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
|
|
snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
|
|
}
|
|
|
|
if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
|
|
|
|
|
|
|
|
if (swiper.loopedSlides) {
|
|
swiper.slides.filter((item) => item.index >= swiper.loopedSlides && item.index < swiper.slides.length - swiper
|
|
.loopedSlides).forEach((item, index) => {
|
|
item.dataSwiperSlideIndex = item.index - swiper.loopedSlides;
|
|
})
|
|
swiper.slides.filter((item) => item.index < swiper.loopedSlides).forEach((item, index) => {
|
|
if (swiper.slides[swiper.slides.length - swiper.loopedSlides * 3 + index]) {
|
|
item.dataSwiperSlideIndex = swiper.slides[swiper.slides.length - swiper.loopedSlides * 3 +
|
|
index]
|
|
.index;
|
|
}
|
|
})
|
|
swiper.slides.filter((item) => item.index >= swiper.slides.length - swiper
|
|
.loopedSlides).forEach((item, index) => {
|
|
item.dataSwiperSlideIndex = swiper.slides[index].index;
|
|
})
|
|
}
|
|
|
|
|
|
if (activeIndex === previousIndex) {
|
|
if (snapIndex !== previousSnapIndex) {
|
|
swiper.snapIndex = snapIndex;
|
|
swiper.emit('snapIndexChange');
|
|
}
|
|
|
|
return;
|
|
} // Get real index
|
|
|
|
let realIndex;
|
|
if (swiper.virtual && params.virtual.enabled) {
|
|
realIndex = activeIndex;
|
|
} else {
|
|
if (swiper.slides[activeIndex].dataSwiperSlideIndex == undefined || swiper.slides[activeIndex]
|
|
.dataSwiperSlideIndex == null) {
|
|
realIndex = activeIndex;
|
|
} else {
|
|
realIndex = swiper.slides[activeIndex].dataSwiperSlideIndex;
|
|
}
|
|
}
|
|
Object.assign(swiper, {
|
|
snapIndex,
|
|
realIndex,
|
|
previousIndex,
|
|
activeIndex
|
|
});
|
|
swiper.emit('activeIndexChange');
|
|
swiper.emit('snapIndexChange');
|
|
|
|
if (previousRealIndex !== realIndex) {
|
|
swiper.emit('realIndexChange');
|
|
}
|
|
|
|
if (swiper.initialized || swiper.params.runCallbacksOnInit) {
|
|
swiper.emit('slideChange', activeIndex);
|
|
}
|
|
}
|