slidePrev.js 2.1 KB

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