translateTo.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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;
  15. // Update progress
  16. swiper.updateProgress(newTranslate);
  17. if (params.cssMode) {
  18. const isH = swiper.isHorizontal();
  19. if (speed === 0) {
  20. wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
  21. } else {
  22. if (!swiper.support.smoothScroll) {
  23. animateCSSModeScroll({
  24. swiper,
  25. targetPosition: -newTranslate,
  26. side: isH ? 'left' : 'top'
  27. });
  28. return true;
  29. }
  30. wrapperEl.scrollTo({
  31. [isH ? 'left' : 'top']: -newTranslate,
  32. behavior: 'smooth'
  33. });
  34. }
  35. return true;
  36. }
  37. if (speed === 0) {
  38. swiper.setTransition(0);
  39. swiper.setTranslate(newTranslate);
  40. if (runCallbacks) {
  41. swiper.emit('beforeTransitionStart', speed, internal);
  42. swiper.emit('transitionEnd');
  43. }
  44. } else {
  45. swiper.setTransition(speed);
  46. swiper.setTranslate(newTranslate);
  47. if (runCallbacks) {
  48. swiper.emit('beforeTransitionStart', speed, internal);
  49. swiper.emit('transitionStart');
  50. }
  51. if (!swiper.animating) {
  52. swiper.animating = true;
  53. if (!swiper.onTranslateToWrapperTransitionEnd) {
  54. swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
  55. if (!swiper || swiper.destroyed) return;
  56. if (e.target !== this) return;
  57. swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
  58. swiper.onTranslateToWrapperTransitionEnd = null;
  59. delete swiper.onTranslateToWrapperTransitionEnd;
  60. if (runCallbacks) {
  61. swiper.emit('transitionEnd');
  62. }
  63. };
  64. }
  65. swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
  66. }
  67. }
  68. return true;
  69. }