effect-carousel.js 1.6 KB
import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
export default function EffectCarousel({
	swiper,
	extendParams,
	on
}) {
	extendParams({
		carouselEffect: {}
	});

	const setTranslate = () => {
		const scaleStep = 0.2;
		const zIndexMax = swiper.slides.length;
		for (let i = 0; i < swiper.slides.length; i += 1) {
			const slideEl = swiper.slides[i];
			const slideProgress = swiper.slides[i].progress;
			const absProgress = Math.abs(slideProgress);
			let modify = 1;
			if (absProgress > 1) {
				modify = (absProgress - 1) * 0.3 + 1;
			}
			const translate = `${slideProgress * modify * 50}%`;
			const scale = 1 - absProgress * scaleStep;
			const zIndex = zIndexMax - Math.abs(Math.round(slideProgress));
			const slideTransform = `translateX(${translate}) scale(${scale})`;
			slideEl.transform(slideTransform);
			slideEl.css({
				zIndex: zIndex
			})
			if (absProgress > 3) {
				slideEl.css({
					opacity: 0
				})
			} else {
				slideEl.css({
					opacity: 1
				})
			}
		}
	};

	const setTransition = duration => {
		const {
			transformEl
		} = swiper.params.coverflowEffect;
		const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;
		for (var i = 0; i < $transitionElements.length; i++) {
			$transitionElements[i].transition(duration);
		}
	};

	effectInit({
		effect: 'carousel',
		swiper,
		on,
		setTranslate,
		setTransition,
		perspective: () => true,
		overwriteParams: () => ({
			watchSlidesProgress: true,
			slidesPerView: 'auto',
			centeredSlides: true,
		})
	});
}