uniapp 解决swiper Tab选项卡切换高度自适应问题

uniapp 关于swiper Tab选项卡切换高度自适应问题

问题描述:使用的是uniapp 官网案例中的一个swiper插件(uni-swiper-dot),当需要tab滚动,但是它又只能在最外层的swiper处设置一个固定的高度,纠结很久以后,终于想出了办法,我把最内层我写的东西的高度的值取出来,然后在赋值给最外层,算是完成了swiper高度自适应的问题。
作为一个前端小白,使用uniapp开发app时走过了好多的坑儿~,今天给大家分享一个自己解决的小问题,希望大神能多多指导,因为很有可能有很简单的方法解决,但是我想得太复杂了,因为我常常是一个想太多的孩砸o(╯□╰)o
在这里插入图片描述

template内代码
<swiper @change="changeTab"  :style="{height:swiperHeight+'px'}">
	<swiper-item>
		<scroll-view>
			<view class="list" style="height:200px">
			</view>
		</scroll-view>
	</swiper-item>
	<swiper-item>
		<scroll-view >
			<view class="list1" style="height:300px">
			</view>
		</scroll-view>
	</swiper-item>
</swiper>
data内代码
data() {
	return {
		listHeight:0,  //内部的高度
		swiperHeight:0,  //外部的高度
	}
}

每次打开页面都要把第一个tab的值赋给最外层,所以在onShow中赋值一次
应该是因为同异步的原因,第一次进入时不出现值,所以使用了延时10就有值了
onShow() {
	let _this = this;
	setTimeout(function(){
		let list = ".list";
		_this.getlistHeight(list);
	},10) 
}

进入不同的tab就从新赋值新的高度
methods: {
	getlistHeight(list){
		let _this = this
		let info = uni.createSelectorQuery().select(list);
		info.boundingClientRect(function(data) {
			// console.log(data)  // 获取元素的各种参数
			 _this.listHeight = data.height ; // 获取元素高度
			_this.getHeight();
		}).exec();
	},
	getHeight(){
		let _this = this;
		_this.swiperHeight = _this.listHeight;
		return _this.swiperHeight;
	},
	changeTab(e) { 
	    let _this = this;
		// 不同的tab不同的高度赋不同的值
		if(e.target.current==0){
			let list = ".list";
			_this.getlistHeight(list);
		}else if(e.target.current==1){
			let list = ".list1";
			_this.getlistHeight(list);
		}
	},
}
	

我只贴了实现高度自适应的代码,并不是实现tab点击切换的代码哦,实现tab切换可以参考uniapp官网的例子,希望能对大家有帮助,有问题的小可爱也可以多多留言,一起成长~

一个前端小白的发言,不专业之处还望大神多多指点,转载请说明出处

uniapp中,可以通过使用swiper和view组件来实现左右tab切换,并且让内容高度自适应。以下是一个示例代码: ``` <template> <view class="container"> <swiper autoplay="false" current="{{ current }}" class="swiper" duration="300" skip-hidden-item-layout="true" @change="swiperChange" > <swiper-item> <view class="tab-item" :class="{active: currentTab === 0}" @tap="changeTab(0)">Tab 1</view> </swiper-item> <swiper-item> <view class="tab-item" :class="{active: currentTab === 1}" @tap="changeTab(1)">Tab 2</view> </swiper-item> <swiper-item> <view class="tab-item" :class="{active: currentTab === 2}" @tap="changeTab(2)">Tab 3</view> </swiper-item> </swiper> <view class="content"> <view class="tab-content" :class="{active: currentTab === 0}" style="height: {{tabHeight[0]}}px"> Content 1 </view> <view class="tab-content" :class="{active: currentTab === 1}" style="height: {{tabHeight[1]}}px"> Content 2 </view> <view class="tab-content" :class="{active: currentTab === 2}" style="height: {{tabHeight[2]}}px"> Content 3 </view> </view> </view> </template> <script> export default { data() { return { current: 0, currentTab: 0, tabHeight: [0, 0, 0] }; }, methods: { swiperChange(e) { this.currentTab = e.detail.current; }, changeTab(index) { this.currentTab = index; this.current = index; } }, mounted() { const query = uni.createSelectorQuery().in(this); query.selectAll(".tab-content").boundingClientRect(rects => { this.tabHeight = rects.map(rect => rect.height); }).exec(); } }; </script> <style> .container { display: flex; flex-direction: column; height: 100vh; } .swiper { height: 80rpx; margin-top: 20rpx; } .tab-item { height: 80rpx; line-height: 80rpx; text-align: center; } .tab-item.active { color: #007aff; border-bottom: 3rpx solid #007aff; } .content { flex: 1; overflow: hidden; } .tab-content { position: absolute; left: 0; top: 0; width: 100%; overflow-y: scroll; -webkit-overflow-scrolling: touch; transition: height 0.3s; } .tab-content.active { height: auto; } </style> ``` 在这个示例中,我们使用swiperswiper-item组件来实现左右tab切换,使用view组件来展示每个tab对应的内容。我们监听swiper的change事件,根据current属性来更新当前选中的tab,同时也更新currentTab属性。在每个tab-content的样式中,我们设置了height为auto,这样可以让内容自适应高度。在mounted生命周期中,我们使用uni.createSelectorQuery()获取每个tab-content的高度,保存在tabHeight数组中,然后在模板中使用style绑定动态高度,实现高度自适应
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值