slidePrev.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* eslint no-unused-vars: "off" */
  2. export default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {
  3. const swiper = this;
  4. const {
  5. params,
  6. animating,
  7. snapGrid,
  8. slidesGrid,
  9. rtlTranslate,
  10. enabled
  11. } = swiper;
  12. if (!enabled) return swiper;
  13. if (params.loop) {
  14. if (animating && params.loopPreventsSlide) return false;
  15. swiper.loopFix(); // eslint-disable-next-line
  16. swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
  17. }
  18. const translate = rtlTranslate ? swiper.translate : -swiper.translate;
  19. function normalize(val) {
  20. if (val < 0) return -Math.floor(Math.abs(val));
  21. return Math.floor(val);
  22. }
  23. const normalizedTranslate = normalize(translate);
  24. const normalizedSnapGrid = snapGrid.map(val => normalize(val));
  25. let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
  26. if (typeof prevSnap === 'undefined' && params.cssMode) {
  27. let prevSnapIndex;
  28. snapGrid.forEach((snap, snapIndex) => {
  29. if (normalizedTranslate >= snap) {
  30. // prevSnap = snap;
  31. prevSnapIndex = snapIndex;
  32. }
  33. });
  34. if (typeof prevSnapIndex !== 'undefined') {
  35. prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
  36. }
  37. }
  38. let prevIndex = 0;
  39. if (typeof prevSnap !== 'undefined') {
  40. prevIndex = slidesGrid.indexOf(prevSnap);
  41. if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
  42. if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
  43. prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;
  44. prevIndex = Math.max(prevIndex, 0);
  45. }
  46. }
  47. return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
  48. }