updateAutoHeight.js 1.47 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 52 53
export default async function updateAutoHeight(speed) {
	const swiper = this;
	const activeSlides = [];
	const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
	let newHeight = 0;
	let i;

	if (typeof speed === 'number') {
		swiper.setTransition(speed);
	} else if (speed === true) {
		swiper.setTransition(swiper.params.speed);
	}

	const getSlideByIndex = index => {
		if (isVirtual) {
			return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) ===
				index)[
				0];
		}

		return swiper.slides[index];
	}; // Find slides currently in view

	if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
		if (swiper.params.centeredSlides) {
			swiper.visibleSlides.each(slide => {
				activeSlides.push(slide);
			});
		} else {
			for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
				const index = swiper.activeIndex + i;
				if (index > swiper.slides.length && !isVirtual) break;
				activeSlides.push(getSlideByIndex(index));
			}
		}
	} else {
		activeSlides.push(getSlideByIndex(swiper.activeIndex));
	} // Find new height from highest slide in view


	for (i = 0; i < activeSlides.length; i += 1) {
		if (typeof activeSlides[i] !== 'undefined') {
			const size = await activeSlides[i].getSize();
			const height = size.height;
			newHeight = height > newHeight ? height : newHeight;
		}
	} // Update Height


	if (newHeight || newHeight === 0) swiper.$wrapperEl.css({
		height: `${newHeight?newHeight:''}px`
	});
}