| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | <!-- z-paging --><!-- github地址:https://github.com/SmileZXLee/uni-z-paging --><!-- dcloud地址:https://ext.dcloud.net.cn/plugin?id=3935 --><!-- 反馈QQ群:790460711 --><!-- 滑动切换选项卡swiper容器,此组件支持easycom规范,可以在项目中直接引用 --><template>	<view :class="fixed?'zp-swiper-container zp-swiper-container-fixed':'zp-swiper-container'" :style="[finalSwiperStyle]">		<!-- #ifndef APP-PLUS -->		<view v-if="cssSafeAreaInsetBottom===-1" class="zp-safe-area-inset-bottom"></view>		<!-- #endif -->		<slot v-if="zSlots.top" name="top" />		<view class="zp-swiper-super">			<view v-if="zSlots.left" :class="{'zp-swiper-left':true,'zp-absoulte':isOldWebView}">				<slot name="left" />			</view>			<view :class="{'zp-swiper':true,'zp-absoulte':isOldWebView}" :style="[swiperContentStyle]">				<slot />			</view>			<view v-if="zSlots.right" :class="{'zp-swiper-right':true,'zp-absoulte zp-right':isOldWebView}">				<slot name="right" />			</view>		</view>		<slot v-if="zSlots.bottom" name="bottom" />	</view></template><script>	import commonLayoutModule from '../z-paging/js/modules/common-layout'		export default {		name: "z-paging-swiper",		mixins: [commonLayoutModule],		data() {			return {				swiperContentStyle: {}			};		},		props: {			// 是否使用fixed布局,默认为是			fixed: {				type: Boolean,				default: true			},			// 是否开启底部安全区域适配			safeAreaInsetBottom: {				type: Boolean,				default: false			},			// z-paging-swiper样式			swiperStyle: {				type: Object,				default: function() {					return {};				},			}		},		mounted() {			this.$nextTick(() => {				this.systemInfo = uni.getSystemInfoSync();				setTimeout(this.updateFixedLayout, 100)			})			// #ifndef APP-PLUS			this._getCssSafeAreaInsetBottom();			// #endif			this.updateLeftAndRightWidth();			this.swiperContentStyle = { 'flex': '1' };			// #ifndef APP-NVUE			this.swiperContentStyle = { width: '100%',height: '100%' };			// #endif		},		computed: {			finalSwiperStyle() {				const swiperStyle = { ...this.swiperStyle };				if (!this.systemInfo) return swiperStyle;				const windowTop = this.windowTop;				const windowBottom = this.systemInfo.windowBottom;				if (this.fixed) {					if (windowTop && !swiperStyle.top) {						swiperStyle.top = windowTop + 'px';					}					if (!swiperStyle.bottom) {						let bottom = windowBottom || 0;						bottom += this.safeAreaInsetBottom ? this.safeAreaBottom : 0;						if (bottom > 0) {							swiperStyle.bottom = bottom + 'px';						}					}				}				return swiperStyle;			}		},		methods: {			// 更新slot="left"和slot="right"宽度,当slot="left"或slot="right"宽度动态改变时调用			updateLeftAndRightWidth() {				if (!this.isOldWebView) return;				this.$nextTick(() => this._updateLeftAndRightWidth(this.swiperContentStyle, 'zp-swiper'));			}		}	}</script><style scoped>	.zp-swiper-container {		/* #ifndef APP-NVUE */		display: flex;		/* #endif */		flex-direction: column;		flex: 1;	}	.zp-swiper-container-fixed {		position: fixed;		/* #ifndef APP-NVUE */		height: auto;		width: auto;		/* #endif */		top: 0;		left: 0;		bottom: 0;		right: 0;	}		.zp-safe-area-inset-bottom {		position: absolute;		/* #ifndef APP-PLUS */		height: env(safe-area-inset-bottom);		/* #endif */	}	.zp-swiper-super {		flex: 1;		overflow: hidden;		position: relative;		/* #ifndef APP-NVUE */		display: flex;		/* #endif */		flex-direction: row;	}		.zp-swiper-left,.zp-swiper-right{		/* #ifndef APP-NVUE */		height: 100%;		/* #endif */	}	.zp-swiper {		flex: 1;		/* #ifndef APP-NVUE */		height: 100%;		width: 100%;		/* #endif */	}		.zp-absoulte {		/* #ifndef APP-NVUE */		position: absolute;		top: 0;		width: auto;		/* #endif */	}		.zp-swiper-item {		height: 100%;	}</style>
 |