translateTo.js 2.6 KB

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