export default function (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {
  const swiper = this;

  const {
    params,
  } = swiper;

  if (swiper.animating && params.preventInteractionOnTransition) {
    return false;
  }

  const minTranslate = swiper.minTranslate();
  const maxTranslate = swiper.maxTranslate();
  let newTranslate;
  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;
  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;
  else newTranslate = translate;

  // Update progress
  swiper.updateProgress(newTranslate);

  if (speed === 0) {
    swiper.setTransition(0);
    swiper.setTranslate(newTranslate);
    if (runCallbacks) {
      swiper.emit('beforeTransitionStart', speed, internal);
      swiper.emit('transitionEnd');
    }
  } else {
    swiper.setTransition(speed);
    swiper.setTranslate(newTranslate);
    if (runCallbacks) {
      swiper.emit('beforeTransitionStart', speed, internal);
      swiper.emit('transitionStart');
    }
    if (!swiper.animating) {
      swiper.animating = true;
      if (!swiper.onTranslateToWrapperTransitionEnd) {
        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
          if (!swiper || swiper.destroyed) return;
          if (e.target !== this) return;
          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
          swiper.onTranslateToWrapperTransitionEnd = null;
          delete swiper.onTranslateToWrapperTransitionEnd;
          if (runCallbacks) {
            swiper.emit('transitionEnd');
          }
        };
      }
      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
    }
  }

  return true;
}

@@ -163,16 +163,31 @@
 params,%0A
+    wrapperEl,%0A
   %7D = sw
@@ -655,16 +655,488 @@
 late);%0A%0A
+  if (params.cssMode) %7B%0A    const isH = swiper.isHorizontal();%0A    if (speed === 0) %7B%0A      wrapperEl%5BisH ? 'scrollLeft' : 'scrollTop'%5D = -newTranslate;%0A    %7D else %7B%0A      // eslint-disable-next-line%0A      if (wrapperEl.scrollTo) %7B%0A        wrapperEl.scrollTo(%7B%0A          %5BisH ? 'left' : 'top'%5D: -newTranslate,%0A          behavior: 'smooth',%0A        %7D);%0A      %7D else %7B%0A        wrapperEl%5BisH ? 'scrollLeft' : 'scrollTop'%5D = -newTranslate;%0A      %7D%0A    %7D%0A    return true;%0A  %7D%0A%0A
   if (sp

Add cssMode support for translateTo