vue 自定义 tabs 控件,可自动左右滑动使得选中项居中显示

效果图如下:

录屏如下:

tabs录屏

控件用法如下:

<navi-tabs :data="tabs" @changeTab="changeTab"></navi-tabs>import NaviTabs from "@/components/navi-tabs";components: { NaviTabs },tabs: [{ codeName: "菜单1" },{ codeName: "菜单2" },// { codeName: "菜单..." },{ codeName: "菜单N" },
],
currentTabIndex: 0,changeTab(index) {this.currentTabIndex = index;// this.refreshTargetTabPage();
},

控件源码如下:

<template><div class="tabs-root"><div class="tabs-container"><div class="tabs" ref="tabs" v-if="data && data.length > 0"><div class="item" v-for="(tab, index) in data" :key="index":class="activeIndex == index ? 'active': ''"@click="setActiveIndex(index)">{{ tab.codeName }}</div></div></div></div>
</template><script>
export default {props: {data: {type: Array,default: [],},},data() {return {activeIndex: 0, // 默认激活的tab索引};},mounted() {this.scrollToActiveTab(); // 初始化时也滑动到第一个tab},methods: {setActiveIndex(index) {this.activeIndex = index;this.$emit("changeTab", index);this.scrollToActiveTab(); // 调用滑动函数},scrollToActiveTab() {this.$nextTick(() => {if (this.activeIndex == 0) {tabs.scrollTo({ left: 0, behavior: 'smooth' });return;}const tabs = this.$refs.tabs;const tabsRect = tabs.getBoundingClientRect();const activeTab = tabs.children[this.activeIndex];const activeTabRect = activeTab.getBoundingClientRect();let widthBeforeAll = 0;for (let index = 0; index < this.activeIndex; index++) {const element = tabs.children[index];const elementsRect = element.getBoundingClientRect();widthBeforeAll += elementsRect.width;}const offSetX = widthBeforeAll + (activeTabRect.width / 2) - (tabsRect.width / 2);tabs.scrollTo({ left: (tabsRect.left / 2 + offSetX), behavior: 'smooth' });});}},
};
</script>
<style lang="scss" scoped>.tabs-root {width: 100%;height: 44px;display: flex;justify-content: center;.tabs-container {width: auto;height: 100%;overflow-x: hidden;overflow-y: hidden;.tabs {display: flex;flex-direction: row;align-items: center;overflow-x: auto;.item {min-width: 120px;height: 26px;margin-top: 9px;margin-bottom: 9px;margin-right: 9px;cursor: pointer;white-space: nowrap;font-family: PingFangSC-Semibold;font-size: 18px;color: #FFFFFF;text-align: center;line-height: 26px;font-weight: 600;background: #C70019;border-radius: 13px;}.active {background: #DD6675;}}}}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS:解决UIAbility调用terminateSelf()后设置不保留最近任务列表中的快照

一、概述 在HarmonyOS应用开发中&#xff0c;UIAbilityContext的terminateSelf()方法被用来结束当前的UIAbility实例。 如果希望在调用terminateSelf()后&#xff0c;让应用在最近任务列表中不保留快照&#xff0c;可以通过在module.json5配置文件中配置removeMissionAfterTe…

el-table下的复选框关联勾选

效果展示&#xff1a; <el-table style"height: 500px;" :data"tableData" border empty-text"暂无数据" v-loading"loading":header-cell-style"{ text-align: center }" :cell-style"{ text-align: center }"…

langchain+ollama+deepseek的部署(win)

ANACONDA 安装 官网&#xff1a;Download Anaconda Distribution | Anaconda 配置系统环境 在系统变量中配置 检查是否配置成功 通过 cmd 窗口输入&#xff1a; conda info 如图&#xff1a;表示成功 配置你的虚拟环境 二、安装 ollama allama 安装 官网地址&#xff1a…

深入理解椭圆曲线密码学(ECC)与区块链加密

椭圆曲线密码学&#xff08;ECC&#xff09;在现代加密技术中扮演着至关重要的角色&#xff0c;广泛应用于区块链、数字货币、数字签名等领域。由于其在提供高安全性和高效率上的优势&#xff0c;椭圆曲线密码学成为了数字加密的核心技术之一。本文将详细介绍椭圆曲线的基本原理…

SQL Server 2008安装教程

目录 一.安装SQL Server 二.安装SQL Server Management Studio 三.使用SQL Server Management Studio 一.安装SQL Server 官网下载:SQL Server 下载 | Microsoft 1.选择安装中的全新安装如下图 2.功能选择 3.实例配置 4.后面一直下一步到数据库引擎配置 密码自己设置 系统…

Microi吾码界面设计引擎之基础组件用法大全【内置组件篇·中】

&#x1f380;&#x1f380;&#x1f380; microi-pageengine 界面引擎系列 &#x1f380;&#x1f380;&#x1f380; 一、Microi吾码&#xff1a;一款高效、灵活的低代码开发开源框架【低代码框架】 二、Vue3项目快速集成界面引擎 三、Vue3 界面设计插件 microi-pageengine …

如何在 Windows 上安装并使用 Postman?

Postman 是一个功能强大的API测试工具&#xff0c;它可以帮助程序员更轻松地测试和调试 API。在本文中&#xff0c;我们将讨论如何在 Windows 上安装和使用 Postman。 Windows 如何安装和使用 Postman 教程&#xff1f;

便携版:随时随地,高效处理 PDF 文件

PDF-XChange Editor Plus 便携版是一款功能强大且极其实用的 PDF 阅读与编辑工具。它不仅支持快速浏览 PDF 文件&#xff0c;还提供了丰富的编辑功能&#xff0c;让用户可以轻松处理 PDF 文档。经过大神优化处理&#xff0c;这款软件已经变得十分轻便&#xff0c;非常适合需要随…

MCP Server 实现一个 天气查询

​ Step1. 环境配置 安装 uv curl -LsSf https://astral.sh/uv/install.sh | shQuestion: 什么是 uv 呢和 conda 比有什么区别&#xff1f; Answer: 一个用 Rust 编写的超快速 (100x) Python 包管理器和环境管理工具&#xff0c;由 Astral 开发。定位为 pip 和 venv 的替代品…

MySQL执行计划

MySQL 的 执行计划&#xff08;Execution Plan&#xff09; 是优化器根据 SQL 语句生成的查询执行路径的详细说明。通过分析执行计划&#xff0c;可以了解 MySQL 如何处理 SQL 查询&#xff08;如索引使用情况、表连接顺序等&#xff09;&#xff0c;进而优化查询性能。 1. 获…

数据大屏点亮工业互联网的智慧之眼

在当今数字化飞速发展的时代&#xff0c;数据已成为企业决策的核心依据&#xff0c;而数据大屏作为数据可视化的重要工具&#xff0c;正逐渐成为工业互联网领域不可或缺的一部分。通过直观、动态的可视化展示&#xff0c;数据大屏能够将复杂的数据转化为易于理解的图表和图形&a…

GPT-SoVITS本地部署:低成本实现语音克隆远程生成音频全流程实战

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS&#xff01;这款由花儿不哭大佬精心打造的语音克隆神…

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek 通义万相制作AI视频流程 4.1 D…

【Unity】合批处理和GPU实例化的底层优化原理(完)

【Unity】批处理和实例化的底层优化原理 URP1.基础概念SetPassCallsDrawCallsBatches 2.重要性排序既然如此为什么仍然要合批&#xff1f; 3.unity主流的合批优化方案和优先级Early-Z透明物体情况 4.合批&#xff08;小场景但是很复杂很多小物件刚需&#xff09;合并纹理图集更…

当人类关系重构:从“相互需要”到“鹅卵石化”——生成式人工智能(GAI)认证的角色与影响

在数字化浪潮的席卷之下,人类社会正经历着前所未有的变革。人与人之间的连接方式、互动模式以及价值认同,都在悄然发生着变化。这一过程中,一个显著的现象是,人与人之间的关系逐渐从传统的“相互需要”模式,转变为一种更为复杂、多元且稳定的“鹅卵石化”结构。在此背景下…

ctfhow——web入门171~175

sql简介 web入门171 ——判断注入点&#xff1a; -1 union select 1,2,3 -- 其实在这之前可以先判断多少列&#xff0c;即 -1‘ group&#xff08;order&#xff09; by 3 -- group by用于将具有相同值的行分组成一个汇总行&#xff0c;可以查看是否报错确定列数 2&#x…

vue遗漏的知识点(动态组件.组件库的操作使用)

----动态组件&#xff08;vue2vue3通用&#xff09; <component :is"..."> 的作用 <component> 是 Vue 的内置组件&#xff0c;用于动态渲染其他组件。:is 属性 用于指定要渲染的组件。它的值可以是&#xff1a; 组件的名称&#xff08;字符串&#xf…

ip改变导致的数据库连接不上

前言 需要用到路由器&#xff0c;所以先把家里的路由器给拆了先用着。新的路由器到了之后&#xff0c;更换上新的路由器之后&#xff0c;调用到服务会有报错&#xff0c;记录一下更换路由器之后ip重新分配服务可能会报的错. 进一步可以看到有关网路在服务当中的影响。 正文 …

DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力&#xff08;MLA&#xff09;技术&#xff0c;混合专家&#xff08;MoE&#xff09;架构&#xff0c; 无辅助损失负载均衡技术&#xff0c;多Token 预测&#xff08;MTP&#xff09;策略。 一、模型架构 DeepSeek-R1的基本架构沿用…

基于HTML5的3D魔方项目开发实践

基于HTML5的3D魔方项目开发实践 这里写目录标题 基于HTML5的3D魔方项目开发实践项目概述核心技术实现1. 3D效果实现CSS3 3D变换魔方结构设计 2. 交互控制实现动画控制键盘控制触摸控制 技术难点与解决方案1. 3D变换控制2. 触摸体验优化3. 动画性能优化 项目收获总结项目展望 项…