translateTo.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { animateCSSModeScroll } from '../../shared/utils.js';
  2. export default function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
  3. if (translate === void 0) {
  4. translate = 0;
  5. }
  6. if (speed === void 0) {
  7. speed = this.params.speed;
  8. }
  9. if (runCallbacks === void 0) {
  10. runCallbacks = true;
  11. }
  12. if (translateBounds === void 0) {
  13. translateBounds = true;
  14. }
  15. const swiper = this;
  16. const {
  17. params,
  18. wrapperEl
  19. } = swiper;
  20. if (swiper.animating && params.preventInteractionOnTransition) {
  21. return false;
  22. }
  23. const minTranslate = swiper.minTranslate();
  24. const maxTranslate = swiper.maxTranslate();
  25. let newTranslate;
  26. if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress
  27. swiper.updateProgress(newTranslate);
  28. if (params.cssMode) {
  29. const isH = swiper.isHorizontal();
  30. if (speed === 0) {
  31. wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
  32. } else {
  33. if (!swiper.support.smoothScroll) {
  34. animateCSSModeScroll({
  35. swiper,
  36. targetPosition: -newTranslate,
  37. side: isH ? 'left' : 'top'
  38. });
  39. return true;
  40. }
  41. wrapperEl.scrollTo({
  42. [isH ? 'left' : 'top']: -newTranslate,
  43. behavior: 'smooth'
  44. });
  45. }
  46. return true;
  47. }
  48. if (speed === 0) {
  49. swiper.setTransition(0);
  50. swiper.setTranslate(newTranslate);
  51. if (runCallbacks) {
  52. swiper.emit('beforeTransitionStart', speed, internal);
  53. swiper.emit('transitionEnd');
  54. }
  55. } else {
  56. swiper.setTransition(speed);
  57. swiper.setTranslate(newTranslate);
  58. if (runCallbacks) {
  59. swiper.emit('beforeTransitionStart', speed, internal);
  60. swiper.emit('transitionStart');
  61. }
  62. if (!swiper.animating) {
  63. swiper.animating = true;
  64. if (!swiper.onTranslateToWrapperTransitionEnd) {
  65. swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
  66. if (!swiper || swiper.destroyed) return;
  67. if (e.target !== this) return;
  68. swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
  69. swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
  70. swiper.onTranslateToWrapperTransitionEnd = null;
  71. delete swiper.onTranslateToWrapperTransitionEnd;
  72. if (runCallbacks) {
  73. swiper.emit('transitionEnd');
  74. }
  75. };
  76. }
  77. swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
  78. swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
  79. }
  80. }
  81. return true;
  82. }