virtual.js 1.11 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
// import { h } from 'vue';

function updateOnVirtualData(swiper) {
	if (
		!swiper ||
		swiper.destroyed ||
		!swiper.params.virtual ||
		(swiper.params.virtual && !swiper.params.virtual.enabled)
	) return;
	swiper.updateSlides();
	swiper.updateProgress();
	swiper.updateSlidesClasses();
	if (swiper.lazy && swiper.params.lazy.enabled) {
		swiper.lazy.load();
	}
	if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {
		swiper.parallax.setTranslate();
	}
}

function renderVirtual(swiperRef, slides, virtualData) {
	if (!virtualData) return null;
	const style = swiperRef.isHorizontal() ? {
		[swiperRef.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`,
	} : {
		top: `${virtualData.offset}px`,
	};
	return slides
		.filter((slide, index) => index >= virtualData.from && index <= virtualData.to)
		.map((slide) => {
			if (!slide.props) slide.props = {};
			if (!slide.props.style) slide.props.style = {};
			slide.props.swiperRef = swiperRef;
			slide.props.style = style;
			return h(slide.type, {
				...slide.props
			}, slide.children);
		});
}

export {
	renderVirtual,
	updateOnVirtualData
};