uniapp实现tab切换可以滚动的效果

news2024/12/29 9:17:42

实现效果

当 tab 切换的内容很多时,需要用到滚动,希望在点击 tab 的时候可以自动滑动到对应的tab下
在这里插入图片描述

知识点

scrollIntoView:该scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。

语法
element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop); //布尔参数
element.scrollIntoView(scrollIntoViewOptions); //对象参数

语法参数

alignToTop [可选],目前之前这个参数得到了良好的支持
true 元素的顶部将对齐到可滚动祖先的可见区域的顶部。对应于scrollIntoViewOptions: {block: “start”, inline: “nearest”}。这是默认值
false 元素的底部将与可滚动祖先的可见区域的底部对齐。对应于scrollIntoViewOptions: {block: “end”, inline: “nearest”}。
scrollIntoViewOptions [可选],目前这个参数浏览器对它的支持并不好,可以查看下文兼容性详情
behavior [可选]定义过渡动画。“auto”,“instant"或"smooth”。默认为"auto"。
block [可选] “start”,“center”,“end"或"nearest”。默认为"center"。
inline [可选] “start”,“center”,“end"或"nearest”。默认为"nearest"。

实例代码

<template>
	<view class="detail_tab_content" v-if="navList.length > 0">
		<view class="navBlack">
			<view v-for="(list,index) in navList" :key="index"
				:class="[current === list.code?'tab_active':'', 'tabItem']" @tap="detailTabChange(list.code, index)">
				{{ list.label }}
			</view>
		</view>
	</view>
</template>

<script>
	import openDetailPage from '@/utils/bridge.js'
	// import { getBanner } from '@/api/sales/sales'
	import nav from '@/utils/huiyan.nav.js';
	export default {
		props: {
			active: {
				type: String,
				default: ''
			}
		},
		data() {
			return {
				navList: [{
						code: 'jxcpage',
						label: '市场'
					},
					{
						code: 'jxcpage1',
						label: '市场1'
					},
					{
						code: 'jxcpage2',
						label: '市场2'
					},
					{
						code: 'jxcpage3',
						label: '市场3'
					},
					{
						code: 'jxcpage4',
						label: '市场4'
					},
					{
						code: 'jxcpage5',
						label: '市场5'
					},
					{
						code: 'jxcpage6',
						label: '市场6'
					}
				],
				current: 'jxcpage',
				oldIndex: -1
			}
		},
		computed: {

		},
		watch: {

		},
		mounted() {

		},
		methods: {
			initNav() {
				// 跳转至对应tab项
				this.$nextTick(() => {
					let element = document.querySelector('.tab_active')
					element && element.scrollIntoView()
				})
			},
			detailTabChange(code, index) {
				// console.log('pppppp', page)
				this.current = code
				this.$emit('changeTopNav', code)
				setTimeout(() => {
					const activeNode = document.querySelector('.tab_active')
					let element = index >= this.oldIndex ? activeNode.nextElementSibling : activeNode
						.previousElementSibling
					element && element.scrollIntoView({
						behavior: "smooth",
						block: "nearest",
						inline: "center"
					})
					this.oldIndex = index
				}, 0)
			}
		}
	}
</script>
<style lang="scss" scoped>
	::-webkit-scrollbar {
		display: none;
	}

	.detail_tab_content {
		height: 80rpx;
		display: flex;
		flex-direction: column;
		// justify-content: center;
		position: relative;
		top: 0;
		left: 0;
		overflow-x: scroll;
		z-index: 1000;
		color: #fff;
	}

	.nav,
	.navBlack {
		display: flex;
		justify-content: flex-start;
		font-size: 28rpx;
		color: #fff;
		// height: 88rpx;
		align-items: center;
		padding: 0 16rpx;
		width: 100%;
		box-sizing: border-box;
		position: fixed;
		left: 0;
		top: 0;
		overflow-x: auto;

		// margin-bottom: 16rpx;
		.tabItem {
			display: flex;
			align-items: center;
			justify-content: center;
			height: 88rpx;
			width: 20%;
			flex-shrink: 0;
		}

		.tab_active {
			color: #F12F38;
			position: relative;
			width: 20%;
			flex-shrink: 0;

			&::after {
				content: '';
				display: inline-block;
				width: 48rpx;
				height: 8rpx;
				background: #F53F3F;
				border-radius: 4rpx;
				position: absolute;
				bottom: 0rpx;
				z-index: 998;
				left: 50%;
				margin-left: -24rpx;
			}
		}
	}

	.navBlack {
		.tab_active {
			color: #F12F38;
		}
	}

	.fiexd_bg {
		height: 88rpx;
		width: 100%;
	}
</style>

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

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

相关文章

2023 年企业 Java 面试前复习的正确姿势(已助力319人入职大厂)

作为 Java 程序员&#xff0c;选择学习什么样的技术&#xff1f;什么技术该不该学&#xff1f;去招聘网站上搜一搜、看看岗位要求就十分清楚了&#xff0c;自己具备的技术和能力&#xff0c;直接影响到你工作选择范围和能不能面试成功。 如果想进大厂&#xff0c;那就需要在 Ja…

ARM-Linux开发与MCU开发的不同之处分析

目录 一、ARM-Linux应用开发和单片机开发的不同 二、Arm-Linux基本开发环境 针对ARM-Linux程序的开发&#xff0c;主要分为三类&#xff1a;应用程序开发、驱动程序开发、系统内核开发。针对不同种类的软件开发&#xff0c;有其不同的特点。 今天&#xff0c;我们来看看ARM-L…

B-6:逆向分析及隐写

任务环境说明: 服务器场景: FTPServer20220509(关闭链接) FTP用户名:PE01密码: PE01 C语言:渗透机Windows7 (Embarcadero Dev-C++) 1,从靶机服务器的FTP上下载PE01文件,对PE01. exe二进制文件进行静态调试,将 main 函数的入口地址作为 Flag 值提交; 双击渗透机kali桌面上…

【数字图像处理】3.对比度增强

目录 3.1 灰度直方图 3.2 线性变换 3.3 直方图正规化 3.4 伽马变换 3.5 全局直方图均衡化 3.6 CLAHE 对比度增强是图像增强的一种&#xff0c;它主要解决的是图像的灰度级范围较小造成的对比度较低的问题&#xff0c;目的是将图像的灰度级增强到指定范围&#xff0c;使得…

Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话

文章目录 简介创建应用构建应用场景API调用与回调事件测试 简介 本文介绍如何在Unity中接入声网SDK&#xff0c;它可以应用的场景有许多&#xff0c;例如直播、电商、游戏、社交等&#xff0c;音视频通话是其实时互动的基础能力。 如下图所示&#xff0c;可以在官网中选择Unit…

【Python实用基础整合(三)】儒略日计算、Pandas写Excel文件多Sheet以及datetime64[ns]时间格式处理

一、儒略日计算 儒略日&#xff08;Julian Day&#xff09;是在儒略周期内以连续的日数计算时间的计时法&#xff0c;主要用于天文学领域&#xff0c;SMOKE、CMAQ、CAMx等模型中也有使用。Linux中主要使用IOAPI库中的juldate和jul2greg来进行常规日期和儒略日的相互转化。Pyth…

MongoDB索引详解-03

MongoDB索引 索引是一种用来快速查询数据的数据结构。BTree 就是一种常用的数据库索引数据结构&#xff0c; MongoDB采用BTree 做索引 &#xff0c;索引创建在colletions上。MongoDB不使用索引的查 询&#xff0c;先扫描所有的文档&#xff0c;再匹配符合条件的文档。 使用索…

docker注意事项和https

docker容器安全注意&#xff1a; 尽量别做的事&#xff1a; 尽量不用 --privileged 运行容器授权容器root用户拥有宿主机的root权限 尽量不在 容器中运行 ssh 服务 尽量不用 --network host 使用 host 网络模式运行容器 尽量要做的事&#xff1a; 尽量使用最小化的镜像 尽量…

四六级套路总结

四六级 四级六级作文背多分 四级 英语四级&#xff08;必过12.10&#xff09; 听力&#xff1a; 全出现 头尾出现 &#xff08;直接选&#xff09; 长篇&#xff1a; 勾 8分钟&#xff0c;边勾边默念 念 勾完五句念一遍&#xff0c;十句通读&#xff08;时间够不要慌&#xff…

SpringSecurity从入门到精通

简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 ​ 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比…

Three.js--》实现3D汽车展厅效果展示

目录 项目搭建 初始化three.js基础代码 加载汽车模型 设置展厅效果 设置GUI面板动态控制车身操作 车门操作与车身视角展示 设置手动点击打开关闭车门 设置图片背景 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目…

【振奋人心】中科院芯片突破,中国ai将逆袭

最近&#xff0c;中国科学院在人工智能芯片领域取得了一项重大突破。中科院计算技术研究所和中国电子科技集团公司第五十三研究所联合研发的新型神经网络加速器芯片&#xff0c;成功实现高效率和低功耗的特性&#xff0c;而且在典型人工智能测试中获取了高达1000倍计算效率的提…

滤波器设计总结

滤波器的主要参数 中心频率&#xff08;Center Frequency&#xff09;&#xff1a;滤波器通带的频率f0&#xff0c;一般取f0&#xff08;f1f2&#xff09;/2&#xff0c;f1、f2为带通或带阻滤波器左、右相对下降1dB或3dB边频点。窄带滤波器常以插损最小点为中心频率计算通带带…

开源大型语言模型(llm)总结

大型语言模型&#xff08;LLM&#xff09;是人工智能领域中的一个重要研究方向&#xff0c;在ChatGPT之后&#xff0c;它经历了快速的发展。这些发展主要涉及以下几个方面&#xff1a; 模型规模的增长&#xff1a;LLM的规模越来越大&#xff0c;参数数量显著增加。这种扩展使得…

11个Java开发者收藏的网站!

导读Java是一种面向对象的编程语言&#xff0c;由Sun Microsystems公司在1995年的时候正式发布。直到今天&#xff0c;Java都一直是最受欢迎的编程语言之一。如今&#xff0c;Java应用于各种各样的技术领域&#xff0c;例如网站开发、Android开发、游戏开发、大数据等等。 在世…

12-代码实战——服务器版表白墙

目录 1.版本一&#xff1a;将数据存到内存中 ①约定前后端交互接口 a.添加表白信息&#xff1a; b.查询表白列表&#xff1a; ②在webapp包下创建message-wall.html前端文件 ③在java包下创建AddMessageServlet后端类 ④在java包下创建MessageListServlet后端类 2.版本…

华为OD机试之乱序整数序列两数之和绝对值最小(Java源码)

乱序整数序列两数之和绝对值最小 题目描述 给定一个随机的整数&#xff08;可能存在正整数和负整数&#xff09;数组 nums&#xff0c;请你在该数组中找出两个数&#xff0c;其和的绝对值(|nums[x]nums[y]|)为最小值&#xff0c;并返回这个两个数&#xff08;按从小到大返回&…

NXP IMX6ULL的官方文档、官方BSP、交叉编译工具链下载

目录 1 官网下载BSP以及相关文档 1.1 文档下载 1.2 NXP 官方uboot和kernel源码下载 1.3 官方评估板硬件资料下载 1.4 官方BSP下载 2 官网SDK下载 3 交叉编译工具链下载及安装 买了块IMX6ULL的开发板&#xff0c;然后移植uboot和kernel的时候&#xff0c;不想直接用开发板…

English Learning - L3 综合练习 7 TED-Living Beyond the Limits 2023.06.14 周三

English Learning - L3 综合练习 7 TED-Living Beyond the Limits 2023.06.14 周三 句 1扩展 go 句 2句 3句 4 - 6句 7-8句 9 - 10句 11扩展 detour 句 12 -13句 14扩展生词 句 15 -16句 17 -18扩展 patchwork 句 18句 19扩展生词 句 20句 21扩展生词 句 22句 23句 24句 25 -26…