Vue 简单自定义标签

Vue 简单自定义标签

在这里插入图片描述

思路:
1、计算每个项离父级左侧宽 left
2、计算当前滑块的宽,绝对定位
3、下一个项的宽/2-滑块的宽/2+下一项离父级左侧的宽 left
4、使用定位left(性能较差一点) 或 translate 移动距离

<template><div class="tab-list"><!--菜单--><div class="tab-list-main"><div class="tab-list-main-item"v-for="(item,index) in list":key="item.component":class="{ 'tab-list-main-active': index === currentIndex }"@click="changeItem(index)">{{item.title}}</div><!--滑块--><div class="tab-list-main-slider" id="lineSlider"></div></div></div>
</template>
export default {name: "oil-tabs",props: {list: { // 菜单type: Array,default: () => []},duration: { // 滑动所需时间 单位mstype: Number,default: () => 300},activeColor: { // 选中项颜色type: String,default: () => ''}},data() {return {currentIndex: 0,// 当前的下标itemObj: {} // 菜单项的位置}},watch: {list: {handler(val) {this.itemObj = {}this.list = valif (val && val.length > 0) {this.$nextTick(() => {this.handleSlider()})}}, immediate: true}},methods: {/*** 点击tab项* */changeItem(index) {if (this.currentIndex === index) {return;}this.currentIndex = indexthis.handleSlider()let item = this.list[index]this.$emit('change', item)},/*** 计算菜单项的位置* */async handleItem() {let obj = {}this.itemObj = {}let itemList = document.getElementsByClassName('tab-list-main-item');if (itemList.length > 0) {for (let o = 0; o < itemList.length; o++) {obj[o] = itemList[o].getBoundingClientRect()obj[o].offsetLeft = itemList[o].offsetLeft}this.itemObj = obj}},/*** 计算滑块当前位置* */async handleSlider() {if (Object.keys(this.itemObj).length === 0) {await this.handleItem()}let currentTab = this.itemObj[this.currentIndex]if (!currentTab) {return;}// 滑块let lineSlider = document.getElementById('lineSlider');if (!lineSlider) {return;}// 滑块宽let { width: currentWidth } = lineSlider.getBoundingClientRect();// 下一个菜单的宽及距父级左侧leftlet { offsetLeft, width } = currentTab;// 滑块位置// lineSlider.style.left = width / 2 - currentWidth / 2 + offsetLeft + 'px';lineSlider.style.transform = `translateX(${width / 2 - currentWidth / 2 + offsetLeft}px)`;}}
}
.tab-list {width: 100%;min-height: 28px;&-main {display: flex;flex-wrap: nowrap;white-space: nowrap;overflow: auto hidden;color: #ccc;position: relative;padding-bottom: 5px;&-item {margin-right: 24px;font-size: 14px;font-weight: 500;&:last-child {margin-right: 0;}}&-active {color: blue;font-weight: 800;}&-slider {margin-top: 2px;height: 3px;width: 28px;border-radius: 2px;background-color: blue;position: absolute;bottom: 0;left: 0;transform: translateX(0);will-change: left;transition: all .1s linear;}}
}

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

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

相关文章

(几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。

(几何:六边形面积)编写程序&#xff0c;提示用户输入六边形的边长&#xff0c;然后显示它的面积。计 算六边形面积的公式是: 这里的s就是边长。下面是一个运行示例 package myjava; import java.math.*; import java.util.Scanner; public class cy {public static void main(S…

【MIT6.S081】准备工作

官方网站&#xff1a; 6.S081 / Fall 2020 相关资源&#xff1a; GitHub - PKUFlyingPig/MIT6.S081-2020fall: MIT undergraduate operating system course 版本控制 6.S081 All-In-One MIT6.S081 | Miigons blog

gridview的模板按钮如何判断用户点击的是哪一行

在asp.net的 GridView 控件中&#xff0c;判断用户点击的是哪一行通常可以通过处理 GridView 的 RowCommand 事件来实现。RowCommand 事件会在 GridView 的每个按钮&#xff08;除非另有指定的CommandName&#xff09;被点击时触发&#xff0c;并且事件参数中包含了足够的信息来…

【机器学习300问】116、什么是序列模型?序列模型能干什么?

一、序列模型是什么&#xff1f; 序列模型是机器学习领域中专门设计来处理具有时间顺序或序列结构数据的模型。这类模型能够理解和学习数据中的顺序依赖关系&#xff0c;因此非常适合诸如自然语言处理、语音识别、音乐生成、时间序列预测等任务。 看了上面的定义&#xff0c;似…

鸿蒙 navigation路由跳转,页面struct 下的生命周期、onShow、onHidden等不会触发问题

经常用安卓思维考虑问题&#xff0c;用习惯了Router方式跳转&#xff0c;但是官方推荐用 navigation&#xff0c;当然它有它的有点&#xff0c; 也有小瑕疵&#xff0c;用了api11 后 发现 navigation路由跳转 &#xff0c;只要被它包裹的跳转到下页面的&#xff0c;有些生命周期…

2024-06-12 问AI: 在大语言模型中,什么是Jailbreak漏洞?

文心一言 在大语言模型中&#xff0c;Jailbreak漏洞&#xff08;也称为越狱攻击或指令注入攻击&#xff09;是一种特定的安全漏洞&#xff0c;它允许用户或攻击者通过精心设计的输入或指令&#xff0c;绕过模型的安全限制&#xff0c;诱导模型产生原本被设定为禁止或限制的输出…

阿里云域名解析

阿里云域名控制台&#xff1a;https://dc.console.aliyun.com/next/index#/domain-list/all

.net 调用海康SDK以及常见的坑解释

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 在工控领域,很多时候需要…

MPT(merkle Patricia trie )及理解solidity里的storage

what&#xff1f; MPT树是一种数据结构&#xff0c;用于在以太坊区块链中高效地存储和检索账户状态、交易历史和其他重要数据。MPT树的设计旨在结合Merkle树和Patricia树的优点&#xff0c;以提供高效的数据存储和验证 MPT树由四种类型的节点组成&#xff1a; **扩展节点&…

max code size exceeded

Warning! Error encountered during contract execution [max code size exceeded] 智能合约编译时提示 contracts/core/CORE.sol:15:1: Warning: Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on m…

小而美的算法技巧:前缀和数组

小而美的算法技巧&#xff1a;前缀和数组 类似动态规划。 class NumArray {private int[] preSum;public NumArray(int[] nums) {preSumnew int[nums.length1];//preSum[0]的前缀和为0for(int i1;i<preSum.length;i){preSum[i]nums[i-1]preSum[i-1];//先计算累加和}}publi…

C++和Python相互调用(1)

Python的官方解释器CPython是用C语言编写&#xff0c;它提供了强大的C API&#xff0c;使得Python可以扩展和嵌入C和C代码。这种互操作性主要通过以下机制实现&#xff1a; Python/C API&#xff1a; Python解释器提供了一组C API&#xff0c;允许开发者编写C或C扩展模块。这…

解锁ChatGPT:从原理探索到GPT-2的中文实践及性能优化

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

视频生成模型 Dream Machine 开放试用;微软将停止 Copilot GPTs丨 RTE 开发者日报 Vol.224

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

MPLS工作过程

控制层面&#xff1a;路由协议工作&#xff0c;生成RIB-FIB&#xff0c;流量的方向即为控制流量&#xff1b; 数据层面&#xff1a;设备基于路由表访问目标&#xff0c;产生数据流量&#xff1b;与控制层面方向相反&#xff1b; 控制层面&#xff1a; 1) 在没有 MPLS 时控制层…

2.6数据报与虚电路

数据报 当作为通信子网用户的端系统要发送一个报文时&#xff0c;在端系统中实现的高层协议先把报文拆成若干个带有序号的数据单元&#xff0c;并在网络层加上地址等控制信息后形成数据报分组(即网络层PDU)中间结点存储分组一段很短的时间&#xff0c;找到最佳的路由后&#x…

TCP是什么、UDP是什么,它们有什么区别

目录 TCP 1.面向连接 2.可靠性 3.流量控制 4.拥塞控制 5.全双工通信 6.面向字节流 7.总结 UDP 1.无连接 2.不可靠 3.头部开销小 4.支持一对多、多对一和多对多通信 5.传输效率高 6.适合传输少量数据 7.总结 TCP和UDP的主要区别 1.连接性 2.可靠性 3.头部开…

6.nginx负载均衡

说明 增加服务器的数量,将请求分发到各个服务器上。 将原来请求集中到单个服务器上的情况改为将请求分发到多个服务器上。 案例 浏览器请求地址http://ip/edu/a.html, 负载均衡的效果,平分到8080和8081两台服务上中。 准备工作 tomcat8080配置 tomcat8081配置 直接通过…

Deepstream 应用——去掉矩形框和文字

问题 如何去掉矩形框&#xff1f;以及矩形框上文字&#xff1f; 思路 参照Deepstream用户手册——DeepStream应用及配置文件-CSDN博客 可以看到修改OSD组可以操控矩形框以及文字&#xff1b; 具体方法 若为配置文件将下列项内容修改如下所示&#xff1a; display-text0dis…

Java注解和反射——动态创建对象执行方法

创建类的对象&#xff1a;调用Class对象的newInstanc()方法 1. 类必须有一个无参构造器。 2. 类的构造器的访问权限需要足够。 没有无参构造器也可以创建对象。只要在操作的时候明确的调用类中的构造器&#xff0c;并将参数传递进去之后&#xff0c;才可以实例化操作。步骤如下…