setTranslate.js 1.15 KB
Newer Older
xhw committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
export default function setTranslate(translate, byController) {
	const swiper = this;
	const {
		rtlTranslate: rtl,
		params,
		$wrapperEl,
		wrapperEl,
		progress
	} = swiper;
	let x = 0;
	let y = 0;
	const z = 0;
	if (isNaN(translate)) {
		return
	}
	if (!$wrapperEl) return
	if (swiper.isHorizontal()) {
		x = rtl ? -translate : translate;
	} else {
		y = translate;
	}

	if (params.roundLengths) {
		x = Math.floor(x);
		y = Math.floor(y);
	}

	if (params.cssMode) {
		wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
	} else if (!params.virtualTranslate) {
		$wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);
	}

	swiper.previousTranslate = swiper.translate;
	swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress

	let newProgress;
	const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();

	if (translatesDiff === 0) {
		newProgress = 0;
	} else {
		newProgress = (translate - swiper.minTranslate()) / translatesDiff;
	}

	if (newProgress !== progress) {
		swiper.updateProgress(translate);
	}

	swiper.emit('setTranslate', swiper.translate, byController);
}