updateSlidesProgress.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import $ from '../../shared/dom.js';
  2. export default function updateSlidesProgress(translate) {
  3. if (translate === void 0) {
  4. translate = this && this.translate || 0;
  5. }
  6. const swiper = this;
  7. const params = swiper.params;
  8. const {
  9. slides,
  10. rtlTranslate: rtl,
  11. snapGrid
  12. } = swiper;
  13. if (slides.length === 0) return;
  14. if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
  15. let offsetCenter = -translate;
  16. if (rtl) offsetCenter = translate; // Visible Slides
  17. slides.removeClass(params.slideVisibleClass);
  18. swiper.visibleSlidesIndexes = [];
  19. swiper.visibleSlides = [];
  20. for (let i = 0; i < slides.length; i += 1) {
  21. const slide = slides[i];
  22. let slideOffset = slide.swiperSlideOffset;
  23. if (params.cssMode && params.centeredSlides) {
  24. slideOffset -= slides[0].swiperSlideOffset;
  25. }
  26. const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);
  27. const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);
  28. const slideBefore = -(offsetCenter - slideOffset);
  29. const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
  30. const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
  31. if (isVisible) {
  32. swiper.visibleSlides.push(slide);
  33. swiper.visibleSlidesIndexes.push(i);
  34. slides.eq(i).addClass(params.slideVisibleClass);
  35. }
  36. slide.progress = rtl ? -slideProgress : slideProgress;
  37. slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
  38. }
  39. swiper.visibleSlides = $(swiper.visibleSlides);
  40. }