swiper
Version:
Most modern mobile touch slider and framework with hardware accelerated transitions
52 lines (51 loc) • 1.81 kB
JavaScript
import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';
export default function updateSlidesClasses() {
const swiper = this;
const {
slides,
params,
slidesEl,
activeIndex
} = swiper;
const isVirtual = swiper.virtual && params.virtual.enabled;
const getFilteredSlide = selector => {
return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
};
slides.forEach(slideEl => {
slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
});
let activeSlide;
if (isVirtual) {
if (params.loop) {
let slideIndex = activeIndex - swiper.virtual.slidesBefore;
if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
} else {
activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
}
} else {
activeSlide = slides[activeIndex];
}
if (activeSlide) {
// Active classes
activeSlide.classList.add(params.slideActiveClass);
// Next Slide
let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
if (params.loop && !nextSlide) {
nextSlide = slides[0];
}
if (nextSlide) {
nextSlide.classList.add(params.slideNextClass);
}
// Prev Slide
let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
if (params.loop && !prevSlide === 0) {
prevSlide = slides[slides.length - 1];
}
if (prevSlide) {
prevSlide.classList.add(params.slidePrevClass);
}
}
swiper.emitSlidesClasses();
}