updateSlidesClasses.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';
  2. export default function updateSlidesClasses() {
  3. const swiper = this;
  4. const {
  5. slides,
  6. params,
  7. slidesEl,
  8. activeIndex
  9. } = swiper;
  10. const isVirtual = swiper.virtual && params.virtual.enabled;
  11. const getFilteredSlide = selector => {
  12. return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
  13. };
  14. slides.forEach(slideEl => {
  15. slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
  16. });
  17. let activeSlide;
  18. if (isVirtual) {
  19. if (params.loop) {
  20. let slideIndex = activeIndex - swiper.virtual.slidesBefore;
  21. if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
  22. if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
  23. activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
  24. } else {
  25. activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
  26. }
  27. } else {
  28. activeSlide = slides[activeIndex];
  29. }
  30. if (activeSlide) {
  31. // Active classes
  32. activeSlide.classList.add(params.slideActiveClass);
  33. // Next Slide
  34. let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
  35. if (params.loop && !nextSlide) {
  36. nextSlide = slides[0];
  37. }
  38. if (nextSlide) {
  39. nextSlide.classList.add(params.slideNextClass);
  40. }
  41. // Prev Slide
  42. let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
  43. if (params.loop && !prevSlide === 0) {
  44. prevSlide = slides[slides.length - 1];
  45. }
  46. if (prevSlide) {
  47. prevSlide.classList.add(params.slidePrevClass);
  48. }
  49. }
  50. swiper.emitSlidesClasses();
  51. }