loopFix.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. export default function loopFix() {
  2. const swiper = this;
  3. swiper.emit('beforeLoopFix');
  4. const {
  5. activeIndex,
  6. slides,
  7. loopedSlides,
  8. allowSlidePrev,
  9. allowSlideNext,
  10. snapGrid,
  11. rtlTranslate: rtl
  12. } = swiper;
  13. let newIndex;
  14. swiper.allowSlidePrev = true;
  15. swiper.allowSlideNext = true;
  16. const snapTranslate = -snapGrid[activeIndex];
  17. const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding
  18. if (activeIndex < loopedSlides) {
  19. newIndex = slides.length - loopedSlides * 3 + activeIndex;
  20. newIndex += loopedSlides;
  21. const slideChanged = swiper.slideTo(newIndex, 0, false, true);
  22. if (slideChanged && diff !== 0) {
  23. swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
  24. }
  25. } else if (activeIndex >= slides.length - loopedSlides) {
  26. // Fix For Positive Oversliding
  27. newIndex = -slides.length + activeIndex + loopedSlides;
  28. newIndex += loopedSlides;
  29. const slideChanged = swiper.slideTo(newIndex, 0, false, true);
  30. if (slideChanged && diff !== 0) {
  31. swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
  32. }
  33. }
  34. swiper.allowSlidePrev = allowSlidePrev;
  35. swiper.allowSlideNext = allowSlideNext;
  36. swiper.emit('loopFix');
  37. }