You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							167 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							167 lines
						
					
					
						
							3.8 KiB
						
					
					
				
								<!-- 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>
							 |