slidePrev.js 2.1 KB

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