uniapp--点击选项卡切换&&滑动切换

Uniapp实现滑动页面tab的切换 阅读详情

效果:

在这里插入图片描述

创建子组件vue文件tab-slide(选项卡部分):

html部分

①利用uniapp组件scroll-view横向滑动

<scroll-view class="uni-swiper-tab" scroll-x>

</scroll-view>

②遍历选项卡标题,用block标签(无样式意义,只用于列表渲染)
scrollStyle:父级样式设置

关于template和block的用法

<block v-for="(tab,index) in tabs" :key="tab.id" :style="scrollStyle">

</block>

③tab选项(name和下划线)

<view class="swiper-tab-list">
	{{tab.name}}
	<view class="swiper-tab-line"></view>
</view>

④为tab选项添加属性

<-- 绑定tab选项样式 -->
:style="scrollItemStyle"
<-- 绑定tab选项被选择后的样式 -->
:class="{'active':tabIndex==index}"
<-- 绑定tab选项的点击事件 -->
@tap="tabtap(index)"

整合代码:

<template>
	<view class="uni-tab-bar">
		<scroll-view class="uni-swiper-tab" scroll-x>
			<block v-for="(tab,index) in tabBars" :key="tab.id">
				<view
					class="swiper-tab-list"
					:class="{'active' : tabIndex == index}"
					@tap="tabtap(index)"
				>
					{{tab.name}}
					<view class="swiper-tab-line"></view>
				</view>
			</block>
		</scroll-view>
	</view>
</template>

script部分

①通过props接受父组件传递过来的数据

props:{
	tabs:Array,
	tabIndex:Number,
}

补充知识点:父组件传值给子组件用props;子组件传值给父组件用$emit

②编写点击事件:(向父组件提交一个事件和值)
在这里提交的事件在父组件中以@tabtap="tabtap"关联父组件

tabtap(index){
	this.$emit('tabtap',index)
}

整合代码:

<script>
	export default {
		name:"tab-slide",
		props: {
			tabBars:Array,
			tabIndex:Number,
		},
		methods:{
			// 点击切换导航
			tabtap(index){
				this.$emit('tabtap',index)
			}
		}
	}
</script>

css部分

①给横向滚动加一条下边框:

.uni-swiper-tab{
	border-bottom:1upx solid #EEEEEE;
}

②设置active时的字体颜色:

.active{
	color: #343434;
}

③设置active和line样式

.active .swiper-tab-line{
	border-bottom:6upx solid #5598E7;
	width: 70upx;
	margin: auto;
	border-top: 6upx solid #5598E7;
	border-radius: 20upx;
}

整合代码:

<style scoped>
	.uni-swiper-tab{
		border-bottom: 1upx solid #EEEEEE;
	}
	.active{
		color: #343434;
	}
	.active .swiper-tab-line{
		border-bottom: 6upx solid #5598E7;
		width: 70upx;
		margin: auto;
		border-top: 6upx solid #5598E7;
		border-radius: 20upx;
	}
</style>

父组件使用子组件tab-slide:

1. 使用子组件:

①import

import tabSlide from "../../components/tab-slide/tab-slide.vue";

②注册:

components: {
	tabSlide
},

③使用:(向子组件传递tabs,tabIndex,和tabtap事件)

<tab-slide :tabs="tabs" :tabIndex="tabId" @tabtap="tabtap"></tab-slide>

2. 编写父组件代码

html

<template>
	<view class="page">
		<tab-slide :tabBars="tabBars" :tabIndex="tabId" @tabtap="tabtap"></tab-slide>
		// 父组件代码
	</view>
</template>

①使用swiper组件(滑块视图容器,常用于轮播图)

:style 绑定样式
@change 绑定change方法(current 改变时会触发)
:current 绑定当前所在滑块的index

<swiper 
	class="swiper-box"
	:style="{height:swiperHeight+'px'}"
	@change="tabChange"
	:current=tabId>
</swiper>

②添加swiper-item(一级循环)

<swiper-item v-for="(items,index) in activity" :key="index">
	
</swiper-item>

③添加scroll-view组件(纵向滚动)

<scroll-view scroll-y class="list"></scroll-view>

④添加template组件(用于条件渲染)

<template v-if="ms.acCl.length > 0">
</template>

⑤添加view标签进行二次循环

<view class="activities" v-for="(item,index1) in items.acCl" :key="index1">

</view>

⑥填充需要展示的内容代码

整合代码:

<view class="uni-tab-bar">
	<swiper 
		class="swiper-box" 
		:style="{height:swiperheight+'px'}" 
		@change="tabChange"
		:current=tabId>
		<swiper-item v-for="(items, index) in activity" :key="index">
			<scroll-view scroll-y class="list">
				<template v-if="items.acCl.length > 0">
					<view class="acticities" v-for="(item,index1) in items.acCl" :key="index1">
						<view class="content-left">
							<image :src="item.img"></image>
						</view>
						<view class="content-right">
							<view class="name">{{item.name}}</view>
							<span class="status">{{item.status}}</span>
							<view class="time">{{item.time}} &nbsp;&nbsp;&nbsp;{{item.address}}</view>
						</view>
					</view>
				</template>
			</scroll-view>
		</swiper-item>
	</swiper>
</view>

script

①在data对象里添加数据

data(){
	return{
		swiperHeight:500,
		tabId:0,
		tabs:[],
		activity:[
			{
				items:[]
			},
			{
				items:[]
			}
			{
				items:[]
			}
		]
	}
}

②编写方法:

tabtap() 是点击选项卡切换
tabChange() 是滑动切换

methods: {
	tabtap(index){
		this.tabId = index;
	},
	tabChange(e){
		this.tabId = e.detail.current
	}
}

③动态计算高度(onLoad生命周期里面写)

onLoad(){
	uni.getSystemInfo({
		success:(res)=>{
			let height = res.windowHeight-uni.upx2x(100)
			this.swiperHeight = height;
		}
	})
}

整合代码:

<script>
import tabSlide from '../../components/tab-slide/tab-slide.vue';
export default {
	components: {
		tabSlide
	},
	data() {
		return {
			swiperheight:500,//高度
			tabId: 0,
			tabBars: [{},{},{}, {},{}],
			activity:[
				{acCl:[]},
				{acCl:[]},
				{acCl:[]},
				{acCl:[]},
				{acCl:[]}
			],
		}
	},
	onLoad() {
		uni.getSystemInfo({
			success:(res) => {
				let height = res.windowHeight-uni.upx2px(100)
				this.swiperHeight = height
			}
		});
	},
	methods: {
		tabtap(index){
			this.tabId = index;
		},
		tabChange(e){
			this.tabId = e.detail.current;
		}
	},
};
</script>

完整代码:

子组件:

<template>
	<view class="uni-tab-bar">
		<scroll-view class="uni-swiper-tab" scroll-x>
			<block v-for="(tab,index) in tabBars" :key="tab.id">
				<view
					class="swiper-tab-list"
					:class="{'active' : tabIndex == index}"
					@tap="tabtap(index)"
				>
					{{tab.name}}
					<view class="swiper-tab-line"></view>
				</view>
			</block>
		</scroll-view>
	</view>
</template>

<script>
	export default {
		name:"tab-slide",
		props: {
			tabBars:Array,
			tabIndex:Number,
			scrollStyle:{
				type:String,
				default:""
			},
			scrollItemStyle:{
				type:String,
				default:""
			}
		},
		methods:{
			// 点击切换导航
			tabtap(index){
				this.$emit('tabtap',index)
			}
		}
	}
</script>

<style scoped>
	.uni-swiper-tab{
		border-bottom: 1upx solid #EEEEEE;
	}
	.active{
		color: #343434;
	}
	.active .swiper-tab-line{
		
		border-bottom: 6upx solid #5598E7;
		width: 70upx;
		margin: auto;
		border-top: 6upx solid #5598E7;
		border-radius: 20upx;
	}
</style>

父组件:

<template>
	<view class="page">
		<tab-slide :tabBars="tabBars" :tabIndex="tabId" @tabtap="tabtap"></tab-slide>
		<view class="uni-tab-bar">
			<swiper 
				class="swiper-box" 
				:style="{height:swiperheight+'px'}" 
				@change="tabChange"
				:current=tabId>
				<swiper-item v-for="(items, index) in activity" :key="index">
					<scroll-view scroll-y class="list">
						<template v-if="items.acCl.length > 0">
							<view class="acticities" v-for="(item,index1) in items.acCl" :key="index1">
								// your code
							</view>
						</template>
					</scroll-view>
				</swiper-item>
			</swiper>
		</view>
	</view>
</template>

<script>
import tabSlide from '../../components/tab-slide/tab-slide.vue';
export default {
	components: {
		tabSlide
	},
	data() {
		return {
			swiperheight:500,//高度
			tabId: 0,
			tabBars: [{},{},{}, {},{}],
			activity:[
				{acCl:[]},
				{acCl:[]},
				{acCl:[]},
				{acCl:[]},
				{acCl:[]}
			],
		}
	},
	onLoad() {
		uni.getSystemInfo({
			success:(res) => {
				let height = res.windowHeight-uni.upx2px(100)
				this.swiperHeight = height
			}
		});
	},
	methods: {
		tabtap(index){
			this.tabId = index;
		},
		tabChange(e){
			this.tabId = e.detail.current;
		}
	},
};
</script>

<style scoped lang="scss">
</style>
【uniapp】uniapp制作滑动选项卡 uniapp制作滑动选项卡 阅读详情

相关推荐

uniapp 实现左右滑动切换页面

方案一切换的是组件页面,适用于各种场景,但比较繁琐,不够简洁,不想看的小伙伴可直接看方案二!另外还可以通过scroll-view实现触底加载,以及下拉刷新。方案二vue2.0完整代码。

m0_66809960的博客 3247

uni-app实现滑动切换效果

uni-app框架了解实现一个滚动切换tab效果,这个很常见的一个效果,最后封装成一个组件,便于之后使用,写这个须要引入uni官方提供的uni.css样式,用到了写好的样式,就不须要本身写了css

weixin_59702843的博客 1万+

uniapp 实现可滑动顶部选项卡(菜单)

uniapp 实现可滑动顶部选项卡(菜单)

maoge_666的博客 3585

uniapp 页面左右滑动切换tab

uniapp 左右滑动 切换内容

m0_61702149的博客 3585

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号

本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。

weixin_28693447的博客 662

激光光束质量评估与光斑尺寸计算:从理论到MATLAB实践

本文详细解析激光光束质量评估与光斑尺寸计算的理论基础及MATLAB实践方法,重点介绍M²因子的测量与应用。通过高斯光束模型、CCD成像法和MATLAB算法实现,帮助读者掌握从理论到实践的完整流程,提升激光系统调试与评估能力。

weixin_29083373的博客 450

uniapp实现可滑动顶部选项卡

uniapp实现可滑动顶部选项卡 利用<scroll-view>和<swiper>实现可滑动顶部选项卡,实现效果类似下图: 这里,简单模拟一下,实现一个大致效果 一、构建顶部tab选项按钮步骤 使用<scroll-view>组件布局,横向滑动需要使scroll-x="true" 设置选项按钮的初始数据barNameList及当前默认第一个tab所在位置tabIndex 点击选项按钮获取当前下标值@click="ontabtap",切换状态 <scroll-vi

weixin_42260975的博客 1万+

STM32 HAL库定时器中断里读编码器速度准吗?聊聊MG310电机的测速与防溢出处理

本文探讨了STM32 HAL库在定时器中断中读取编码器速度的精度问题,特别针对MG310电机的测速与防溢出处理提供了解决方案。通过对比定时中断法和编码器模式的性能,揭示了硬件编码器接口在降低误差和CPU占用率方面的优势,并详细介绍了CubeMX配置技巧和防溢出处理的工程实践。

weixin_28720767的博客 401

uniapp组件之tab选项卡滑动切换

tab选项卡滑动切换

zhanglinsen123的博客 1万+

基于Claude AI的Dex个人操作系统:从零部署到高效工作流实战

在当今信息过载的时代,个人知识管理(PKM)和任务自动化成为提升效率的关键技术。传统PKM工具如Notion、Obsidian虽然提供了强大的信息存储能力,但本质上是被动的数据库,需要用户手动维护结构和链接,容易形成信息孤岛。其核心原理在于通过预设的文件夹结构和智能路由,实现信息的自动归类与关联。这种自动化同步机制的技术价值在于彻底消除重复劳动和决策疲劳,让用户从繁琐的信息整理中解放出来,专注于高价值思考。在实际应用场景中,它尤其适合需要处理大量会议、任务和人际关系的知识工作者,如产品经理、项目经理和团队领

weixin_42521558的博客 379

零基础教你学RDMA驱动开发--第8篇:队列对(QP)、完成队列(CQ)与工作请求(WR)机制剖析

本文深入剖析了RDMA(远程直接内存访问)中的核心机制:队列对(QP)、完成队列(CQ)和工作请求(WR)。QP作为通信端点包含发送队列(SQ)和接收队列(RQ);WR是用户提交的操作指令,转换为工作队列元素(WQE)后由网卡异步执行;CQ则提供完成通知机制。文章详细介绍了三者的协作原理,包括QP状态机、WR提交方式、CQ轮询机制,以及关键的信号控制技术(Signaled Mode)来优化性能。同时对比了SEND/RECV和RDMA WRITE两种模式的差异,提供了调试技巧和最佳实践。这些机制共同构成了RD

amy_mhd的博客 157

uniapp可滑动选项卡

tabControl-tag.vue <template name="tabControl"> <scroll-view scroll-x="true" :style="'background-color:'+bgc+';top:'+top+'px;'" :class="fixed?'fxied':''" :scroll-left='scrollLeft' scroll-with-animation id="tabcard"> <view class="tabLis

Lucky铂爵 2760

15、 深入理解Akka微服务:创建与管理体育博彩平台

本博文深入探讨了如何使用Akka微服务架构为体育博彩平台创建投影和管理事件数据,包括市场投影、投注投影以及数据库投影的实现。同时,介绍了通过gRPC提供HTTP端点以供外部系统访问的方法,并详细说明了在本地环境和Kubernetes中运行应用程序的步骤及配置建议。

weixin_35756624的博客 96

uni-app 选项卡 swiper点击切换可滑动切换页面

【代码】uni-app 选项卡 swiper点击切换可滑动切换页面。

weixin_50538763的博客 2669

Claude桌面端安装失败?Retrying无限重试终极解决方案(亲测有效)

Claude桌面端安装卡在Retrying并非网络问题,而是安装器下载源异常导致。本文提供已验证方案:一条命令即可解决问题🚀

XiaoqiangClub的博客 2345

从询价到回款:一篇讲透 SAP SD 销售与分销的实战入门指南

摘要: SAP SD(Sales and Distribution)模块是SAP ERP中管理销售与分销的核心组件,贯穿从订单到回款(Order-to-Cash)的全流程。其核心价值在于将销售业务结构化,通过主数据(客户、物料、定价)和交易单据(订单、交货、发票)实现流程可审计、可自动化。SD模块与物流(MM)、生产(PP)、财务(FI)深度集成,涵盖定价策略、信用控制、发运管理、国际贸易等复杂场景。关键设计包括条件技术(Condition Technique)实现灵活定价,单据流(Document Flo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 258

uniapp 实现滑动视图切换 顶部滚动导航栏

无论小程序的时候一般有这个功能,在页面处于首页时候,滑动视图,切换视图顶部滚动导航也跟着切换 1.想要实现这个功能就需要实现顶部导航栏,首先实现顶部滚导航栏 点击高亮颜色显示 模板代码 <scroll-view scroll-x="true" class="scroll-content" > //滑动导航栏数组 <view v-for="(item,index) in topBar" :key="index" class="scroll-item" > <text

qq_55272229的博客 6743

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

uniapp 选项卡动态切换更新数据问题

业务场景: 选项卡a,b,c 下面的 scrollor 滑动块 点击a 给循环变量data赋值a数组 点击b 给循环变量data赋值b数组 … 以上场景比如点击表情包,下面的表情内容会改变,而且表情是左右可以滑动的,像qq或者微信那样。此类场景经常有新手遇到所以特此提供解决方案以便大家避坑 出现的问题: 当选项卡在a处,表情内容滑动到第二个view。 点击选项卡b,表情内容还是在第二个view。正常是回到第一个view。 问题原因: 组件属性设置不生效 粗线画重点 当重复设置某些属性为相同的值时,不会同

junjiahuang的博客 4029

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

uniapp组件之tab选项卡滑动切换功能实现 vue2版本+vue3版本

uniapp组件之tab选项卡滑动切换功能实现,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧。

weixin_42220130的博客 4358

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

uniapp tab选项卡切换

uniapp tab选项卡切换,tab切换

weixin_46406211的博客 552

uniapp组件之tab选项卡滑动切换功能实现

【代码】uniapp组件之tab选项卡滑动切换功能实现。

coldriversnow的专栏 646

uni tabs组件,tab选项卡滑动切换

tabs点击和左右切换滑动,uni框架,基于vue2语法。"uni组件库没有tabs选项卡组件,只有自己封装,实现的思路: 考虑分为上下两块,上部是类型切换绑定点击事件,下部之前用动态组件,下部改为swiper组件,并绑定change事件。 swiper组件的属性current绑定第几个swiper-item子项,并且watch监听绑定值,对这个绑定值处理和上部的类型对应上(也可不处理)。"

在职可交流前端开发,包括:web端、uniapp等,欢迎指教。 1755

uniapp实现选项卡绑定切换、懒加载

首先获取tab点击时的下标传递给list(list里面写了swiperswiper里有个currentcurrent="activeIndex"会自动跳到咱想要的界面)别看“二、”这么多哈都是虚的目的就是把云函数获取的数组传给list-cardlist引用后传给list-item(看看那个云数组有几条?但这样只是拿到了几个并没有真正把数据整到界面上因为咱那个界面是list-card里面写的界面内容--->传给list-card。//这里的@change可是系统的哈。......

ccz80的博客 4645

uniapp scroll-view 选项卡 滑动切换

当选项大于屏幕宽度,在选中选项时希望选中项聚焦到屏幕可视范围:(横向滚动) scroll-view属性 在代码中需要给每一个选项tab 绑定一个ID 例::id="'tab-'+index" index为循环索引 第一种方法: :scroll-into-view="scrollInto" scroll-into-view值应为某子元素id(id不能以数字开头)。设置哪个方向...

yangqii的博客 8237

【 uniapp 】选项卡切换

【 微信小程序 】选项卡切换

zwj 2467
上一篇: display:flex布局下设置white-space:nowrap出现bug
下一篇: C语言--链表(静态、动态)& 链表合并练习
奥奥奥曼
博客等级 码龄7年 15粉丝 33原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值