updateProgress.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. export default function updateProgress(translate) {
  2. const swiper = this;
  3. if (typeof translate === 'undefined') {
  4. const multiplier = swiper.rtlTranslate ? -1 : 1;
  5. // eslint-disable-next-line
  6. translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
  7. }
  8. const params = swiper.params;
  9. const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  10. let {
  11. progress,
  12. isBeginning,
  13. isEnd,
  14. progressLoop
  15. } = swiper;
  16. const wasBeginning = isBeginning;
  17. const wasEnd = isEnd;
  18. if (translatesDiff === 0) {
  19. progress = 0;
  20. isBeginning = true;
  21. isEnd = true;
  22. } else {
  23. progress = (translate - swiper.minTranslate()) / translatesDiff;
  24. const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;
  25. const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;
  26. isBeginning = isBeginningRounded || progress <= 0;
  27. isEnd = isEndRounded || progress >= 1;
  28. if (isBeginningRounded) progress = 0;
  29. if (isEndRounded) progress = 1;
  30. }
  31. if (params.loop) {
  32. const firstSlideIndex = swiper.getSlideIndexByData(0);
  33. const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
  34. const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
  35. const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
  36. const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
  37. const translateAbs = Math.abs(translate);
  38. if (translateAbs >= firstSlideTranslate) {
  39. progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
  40. } else {
  41. progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
  42. }
  43. if (progressLoop > 1) progressLoop -= 1;
  44. }
  45. Object.assign(swiper, {
  46. progress,
  47. progressLoop,
  48. isBeginning,
  49. isEnd
  50. });
  51. if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);
  52. if (isBeginning && !wasBeginning) {
  53. swiper.emit('reachBeginning toEdge');
  54. }
  55. if (isEnd && !wasEnd) {
  56. swiper.emit('reachEnd toEdge');
  57. }
  58. if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
  59. swiper.emit('fromEdge');
  60. }
  61. swiper.emit('progress', progress);
  62. }