28 lines
1.1 KiB
JavaScript
28 lines
1.1 KiB
JavaScript
/* eslint no-unused-vars: "off" */
|
|
export default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {
|
|
const swiper = this;
|
|
let index = swiper.activeIndex;
|
|
const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
|
|
const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
|
|
const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
|
|
|
|
if (translate >= swiper.snapGrid[snapIndex]) {
|
|
const currentSnap = swiper.snapGrid[snapIndex];
|
|
const nextSnap = swiper.snapGrid[snapIndex + 1];
|
|
|
|
if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
|
|
index += swiper.params.slidesPerGroup;
|
|
}
|
|
} else {
|
|
const prevSnap = swiper.snapGrid[snapIndex - 1];
|
|
const currentSnap = swiper.snapGrid[snapIndex];
|
|
|
|
if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {
|
|
index -= swiper.params.slidesPerGroup;
|
|
}
|
|
}
|
|
|
|
index = Math.max(index, 0);
|
|
index = Math.min(index, swiper.slidesGrid.length - 1);
|
|
return swiper.slideTo(index, speed, runCallbacks, internal);
|
|
} |