123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { preload } from '../../shared/process-lazy-preloader.js';
- export function getActiveIndexByTranslate(swiper) {
- const {
- slidesGrid,
- params
- } = swiper;
- const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
- let activeIndex;
- 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;
- }
- return activeIndex;
- }
- export default function updateActiveIndex(newActiveIndex) {
- const swiper = this;
- const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
- const {
- snapGrid,
- params,
- activeIndex: previousIndex,
- realIndex: previousRealIndex,
- snapIndex: previousSnapIndex
- } = swiper;
- let activeIndex = newActiveIndex;
- let snapIndex;
- const getVirtualRealIndex = aIndex => {
- let realIndex = aIndex - swiper.virtual.slidesBefore;
- if (realIndex < 0) {
- realIndex = swiper.virtual.slides.length + realIndex;
- }
- if (realIndex >= swiper.virtual.slides.length) {
- realIndex -= swiper.virtual.slides.length;
- }
- return realIndex;
- };
- if (typeof activeIndex === 'undefined') {
- activeIndex = getActiveIndexByTranslate(swiper);
- }
- 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 (activeIndex === previousIndex) {
- if (snapIndex !== previousSnapIndex) {
- swiper.snapIndex = snapIndex;
- swiper.emit('snapIndexChange');
- }
- if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
- swiper.realIndex = getVirtualRealIndex(activeIndex);
- }
- return;
- }
- // Get real index
- let realIndex;
- if (swiper.virtual && params.virtual.enabled && params.loop) {
- realIndex = getVirtualRealIndex(activeIndex);
- } else if (swiper.slides[activeIndex]) {
- realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);
- } else {
- realIndex = activeIndex;
- }
- Object.assign(swiper, {
- previousSnapIndex,
- snapIndex,
- previousRealIndex,
- realIndex,
- previousIndex,
- activeIndex
- });
- if (swiper.initialized) {
- preload(swiper);
- }
- swiper.emit('activeIndexChange');
- swiper.emit('snapIndexChange');
- if (previousRealIndex !== realIndex) {
- swiper.emit('realIndexChange');
- }
- if (swiper.initialized || swiper.params.runCallbacksOnInit) {
- swiper.emit('slideChange');
- }
- }
|