[保姆级教程]uniapp自定义标签页切换组件

news2024/12/25 22:11:01

在这里插入图片描述

文章目录

  • 导文
  • 样式
  • 改成动态列表
  • 切换点击效果
  • 加上点击自动滑动scroll-view
  • 加上切换组件效果


导文

unaipp自带的标签页和ui设计相差太大,直接修改组件比手写一个还麻烦,下面手写一个。

样式

在这里插入图片描述
先用scroll-view做一个滑动,不然多的话滑动不了。

	<scroll-view class="scroll-view_H" scroll-x="true" @scroll="scroll" scroll-left="120">
				<span class="checkDetails-nav-item action">
					体重
				</span>
				<span class="checkDetails-nav-item">
					餐食
				</span>
				<span class="checkDetails-nav-item">
					喝水
				</span>
				<span class="checkDetails-nav-item">
					睡眠
				</span>
				<span class="checkDetails-nav-item">
					运动
				</span>
			</scroll-view>

然后实现默认样式,和标签页点击样式。

.scroll-view_H {
			white-space: nowrap;
			width: 100%;
			background: #fff;
		}

		.scroll-view-item {
			height: 300rpx;
			line-height: 300rpx;
			text-align: center;
			font-size: 36rpx;
		}

		.scroll-view-item_H {
			display: inline-block;
			width: 100%;
			height: 300rpx;
			line-height: 300rpx;
			text-align: center;
			font-size: 36rpx;
		}

		.checkDetails-nav-item {
			font-size: 16px;
			font-weight: 500;
			letter-spacing: 0px;
			line-height: 30px;
			color: rgba(75, 89, 105, 1);
			text-align: left;
			vertical-align: top;
			background: #fff;
			padding: 0px 30px;

		}

		.action {
			font-size: 18px;
			font-weight: 700;
			letter-spacing: 0px;
			line-height: 25.2px;
			color: rgba(12, 16, 25, 1);
			position: relative;
		}

		.action::after {
			content: '';
			position: absolute;
			background-image: url(../../static/checkDetails/action.png);
			background-size: 100%;
			background-repeat: no-repeat;
			width: 28px;
			height: 10px;
			top: 18px;
			left: 34px;
		}

改成动态列表

在这里插入图片描述
循环自定义的teb组件就好

		<scroll-view class="scroll-view_H" scroll-x="true" @scroll="scroll" scroll-left="120">
				<span v-for="(item, index) in navList" :key="index" class="checkDetails-nav-item" :class="{ 'action': navCurrent == item.value }">
					{{ item.text }}
				</span>
			</scroll-view>

在data中定义列表,和当前展示的页面值

	data() {
		return {
			navCurrent: 'weight',
			navList: [{
				text: '体重',
				value: 'weight'
			}, {
				text: '餐食',
				value: 'food'
			}, {
				text: '喝水',
				value: 'drink'
			}, {
				text: '睡眠',
				value: 'sleep'
			}, {
				text: '运动',
				value: 'sport'
			}],
		}
	},

加上切换页面效果。

切换点击效果

在这里插入图片描述
加上一个handleSwitch点击事件

<span v-for="(item, index) in navList" :key="index" class="checkDetails-nav-item"
					:class="{ 'action': navCurrent == item.value }" ="handleSwitch(item)">
					{{ item.text }}
				</span>

切换navCurrent 值就好

handleSwitch(item){
			this.navCurrent = item.value
		}

加上点击自动滑动scroll-view

先把scroll-left改成动态的,在handleSwitch方法中添加index索引值传过去

<scroll-view class="scroll-view_H" scroll-x="true" :scroll-left="scrollValue">
				<span v-for="(item, index) in navList" :key="index" class="checkDetails-nav-item"
					:class="{ 'action': navCurrent == item.value }" @click="handleSwitch(item, index)">
					{{ item.text }}
				</span>
			</scroll-view>

使用index索引值,判断滑动位置

handleSwitch(item,index) {
			this.navCurrent = item.value
			this.scrollValue = index * 100
		}

加上切换组件效果

在这里插入图片描述
在这里插入图片描述
先创建好组件,一般放在components里面
在这里插入图片描述
在父页面中引入组件,在template里面写组件

	<view class="checkDetails">
		<view class="checkDetails-nav">
			<scroll-view class="scroll-view_H" scroll-x="true" :scroll-left="scrollValue">
				<span v-for="(item, index) in navList" :key="index" class="checkDetails-nav-item"
					:class="{ 'action': navCurrent == item.value }" @click="handleSwitch(item, index)">
					{{ item.text }}
				</span>
			</scroll-view>
		</view>
		<drinkPage v-if="navCurrent == 'drink'"></drinkPage>
		<foodPage v-if="navCurrent == 'food'"></foodPage>
		<sleepPage v-if="navCurrent == 'sleep'"></sleepPage>
		<sportPage v-if="navCurrent == 'sport'"></sportPage>
		<weightPage v-if="navCurrent == 'weight'"></weightPage>

	</view>
</template>

<script>

别忘了用import 引入和components注册组件名哦

import drinkPage from './components/drinkPage/index.vue'
import foodPage from './components/foodPage/index.vue'
import sleepPage from './components/sleepPage/index.vue'
import sportPage from './components/sportPage/index.vue'
import weightPage from './components/weightPage/index.vue'

export default {
	components: {
		drinkPage,
		foodPage,
		sleepPage,
		sportPage,
		weightPage
	},

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1850265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

共93本!全网最全Frontiers旗下期刊2022、2023版影响因子和分区对比完整版目录!

本周投稿推荐 SSCI • 1区&#xff0c;4.0-5.0&#xff08;无需返修&#xff0c;提交可录&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.1-0.5&…

Android jetpack Room的简单使用

文章目录 项目添加ksp插件添加 room 引用开始使用room1. 创建bean2. 创建 dao类3. 创建database类 数据库升级复制数据库到指定路径参考文献 项目添加ksp插件 注意&#xff0c;因为ksp插件 是跟项目中使用的kotlin的版本要保持一致的&#xff0c;否则会报错的 首先我们去 https…

HTML静态网页成品作业(HTML+CSS)——家乡泉州介绍网页(3个页面)(表格布局)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;table布局&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。…

Vue75-路由传参3

一、在index.js中使用props参数 1-1、写法一&#xff1a;值为对象 此时&#xff0c;参数是固定写死的&#xff0c;不推荐&#xff01; 1-2、值为布尔值 此时只能收到params中的参数&#xff01; 1-3、值为函数 &#xff08;最强大&#xff09; 二、小结

什么是新媒体矩阵?如何搭建?

什么是新媒体&#xff1f; 新媒体矩阵作用 新媒体矩阵账号类型 搭建新媒体矩阵步骤

Autosar Dcm配置-0x23服务ReadMemoryByAddress-基于ETAS软件

文章目录 前言Dcm配置DcmDsdDcmDspDcmDspMemoryIdInfo 代码分析总结 前言 一般在调教开发阶段&#xff0c;会使用XCP进行观测和标定&#xff0c;本质上也是操作指定的内存地址。量产后&#xff0c;一般XCP会取消。本文介绍的UDS ReadMemoryByAddress服务&#xff0c;也是读取内…

第9章 项目管理概论 (项目管理原则)

第9章 项目管理概论 9.7项目管理原则&#xff0c;在第三版教材第344~349页&#xff1b; 文字图片音频方式 第一个知识点&#xff1a;根据环境进行裁剪 (关注的)关键点 每个项目都具有独特性 项目成功取决于适合项目的独特环境和方法 裁剪应该在整个项目进展过程中持续进行第二…

AUCell和AddModuleScore函数进行基因集评分

AUCell 和AddModuleScore 分析是两种主流的用于单细胞RNA测序数据的基因集活性分析的方法。这些基因集可以来自文献、数据库或者根据具体研究问题进行自行定义。 AUCell分析原理&#xff1a; 1、AUCell分析可以将细胞中的所有基因按表达量进行排序&#xff0c;生成一个基因排…

atcoder abc 358

A welcome to AtCoder Land 题目&#xff1a; 思路&#xff1a;字符串比较 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {string a, b;cin >> a >> b;if(a "AtCoder" && b "Land") cout <&…

车辆轨迹预测系列 (三):nuScenes数据集详细介绍-1

车辆轨迹预测系列 (三)&#xff1a;nuScenes数据集详细介绍-1 文章目录 车辆轨迹预测系列 (三)&#xff1a;nuScenes数据集详细介绍-1一、数据集准备1、解压2、安装nuscenes-devkit3、介绍 二、架构内容解释1、category 类别2、attribute 属性3、visibility 可见性4、instance …

【金】01Y120 pygame 外星人入侵

13241890059 具有功能&#xff1a;分数记录、排行榜、难度升级 ‪H:\0work\1_pygame-200

emWin在Windows上仿真运行环境配置

文章目录 一、emWin介绍二、emWin必用的2个工具2.1 PC仿真器2.2 GUIBuilder图形化设计工具三、安装VS2022四、打开emwin仿真工程五、常见的配置修改5.1 运行内存修改5.2 LCD显示屏尺寸的修改一、emWin介绍 emWin(Embedded Wizard Graphics Library)是Segger公司开发的嵌入式…

Redis实战—Redis分布式锁

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于Redis的分布式锁 Redis锁代码实现 修改业务代码 分布式锁误删问题 分布式锁原子性问题 Lua脚本 编写脚本 代码优化 总结 分布式锁介绍…

transdreamer 论文阅读笔记

这篇文章是对dreamer系列的改进&#xff0c;是一篇world model 的论文改进点在于&#xff0c;dreamer用的是循环神经网络&#xff0c;本文想把它改成transformer&#xff0c;并且希望能利用transformer实现并行训练。改成transformer的话有个地方要改掉&#xff0c;dreamer用ht…

Large Language Model based Multi-Agents: A Survey of Progress and Challenges

目录 摘要简介背景单一智能体系统单智能体 vs .多智能体系统 剖析多智能体系统&#xff1a;接口、剖析、通信和能力智能体 - 环境接口智能体画像智能体通信能力获取 摘要 大型语言模型( Large Language Models&#xff0c;LLMs )在各种任务中都取得了令人瞩目的成功。由于LLMs…

Linux搭建我的世界乌托邦探险之旅3.2整合包服务端,Minecraft开服教程

Linux服务器使用MCSM10 搭建 我的世界 乌托邦探险之旅3.2 整合包 服务端 的教程&#xff0c;Minecraft整合包开服教程。 大型养老探险整合包&#xff1a;乌托邦探险之旅3.2&#xff0c;探索上千种结构&#xff0c;造访丰富的自然群系&#xff0c;欣赏生动的生物动画&#xff0…

Android SurfaceFlinger——屏幕热插拔回调(九)

上一篇文章分析了回调注册监听的调用流程&#xff0c;对于数据的回调正好是注册监听的逆向调用。首先前面提到过在 HWC2On1Adapter 中就会直接转型为每一个回调到上层&#xff0c;这里我们就看一下屏幕热插拔回调&#xff08;hotplugHook&#xff09;的调用流程。 一、硬件回调…

数据库系统概论——数据库恢复技术

文章目录 数据库恢复技术事务的基本概念什么是事务如何定义事务&#xff1a;事务的特性 数据库恢复概述故障的种类恢复的实现技术恢复策略事务故障的恢复系统故障的恢复介质故障的恢复 数据库恢复技术 事务的基本概念 什么是事务 事务使用户定义的一个数据库操作序列&#x…

步步精:连接器领域的卓越品牌

自1987年成立以来&#xff0c;步步精坐落于美丽的旅游城市——温州市乐清虹桥镇&#xff0c;被誉为“国家电子主体生产基地”、“国家精密模具制造基地”。公司拥有7大厂区、9大事业部&#xff0c;800名专职员工&#xff0c;致力于提供高品质的连接器解决方案。注册商标“BBJCO…

数据库精选题(三)(SQL语言精选题)(按语句类型分类)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据库 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 创建语句 创建表 创建视图 创建索引…