分享一个 VUE 侧边导航共用组建

项目效果图:

项目描述:加载组建时,隐藏,鼠标滑动到指定区域的时候该菜单选中高亮,点击菜单跳转到指定模块,每个页面都适用。
在这里插入图片描述

html 部分:

提示:我这里有英文所以有$i18n.locale==='zh' 判断,使用的时候按照个人项目情况使用。

 <div class="left-nav-box" ref="nav-box"><div class="nav"><div class="line"><div class="sub-line active" :style="`margin-top: ${active*0.152}rem`"></div></div><ul><li v-for="(item,index) in menu":key="item.name" @click="tabClick(item,index)":style="`color:${active===index?'#fff':'rgba(255, 255, 255, 0.70)'}`">{{ $i18n.locale === 'zh' ? item.title : item.titleEn }}</li></ul></div></div>

css部分:

.left-nav-box {position: fixed;top: 220px;left: 20px;z-index: -1;//display: none;opacity: 0;transition: 0.3s ease-in-out;
}.line {background: rgba(255, 255, 255, 0.26);width: 4px;border-radius: 4px 4px 4px 4px;overflow: hidden;.sub-line {width: 4px;height: 32px;background: #1874F6;border-radius: 4px;}
}.active {transition: 0.3s ease-in-out;
}.nav {display: flex;padding: 12px;font-size: 15px;min-width: 200px;background: rgba(0, 0, 0, 0.26);border-radius: 4px 4px 4px 4px;opacity: 1;border: 1px solid rgba(255, 255, 255, 0.3);backdrop-filter: blur(25px);ul {width: 100%;}li {width: 100%;font-weight: 700;color: rgba(255, 255, 255, 0.7);display: block;cursor: pointer;&:hover {color: #fff;}margin-bottom: 9px;margin-left: 12px;&:last-child {margin-bottom: 0;}}
}

侧边栏json部分:

//注意:1: 数组的key名,需要根据组建的name来设置
//     2: 侧边菜单什么时候出现需要,在使用的组建中设置 id = 组建的name
//     3: 点击的链接需要在组建中设置 id= name.url(name:组建的name即home.url)
//     4: 需要在页面显示,设置菜单json数组就可以了
export default {home:[{url:'tab1',title:"xxxx",titleEn:"xxxx"},{url:'tab2',title:"xxxx",titleEn:"xxxx"},]
}

js部分:

import menu from "../LeftTabs/leftMenu"
export default {name: "leftNav",data() {return {menuLeft: menu,active: 0,num: 0,top: []}},props: {menu: {type: Array,default: []},startMouse: {type: String,default: '#tab1'}},mounted() {this.getLoad();},watch: {$route: {handler: function () {this.getLoad()}}},methods: {getLoad() {this.top = [];if (this.menuLeft[this.$route.name]) {this.menuLeft[this.$route.name].forEach((item, index) => {this.num = index;//获取每个侧边菜单距离顶部的距离this.top[index] = document.getElementById(item.url).offsetTop;})window.addEventListener("scroll", this.scrollDown)} else {window.removeEventListener('scroll', this.scrollDown)}},scrollDown() {//获取从哪里开始显示侧边栏let top = document.getElementById(this.startMouse);if (top) {let scrollTop =window.pageYOffset ||document.documentElement.scrollTop ||document.body.scrollTop;//获取菜单的每一项的小于鼠标滑动的距离顶部的高度let item = this.top.filter(item => item < scrollTop);// 排序取最大的一个let numTxt = item.sort((a, b) => b - a)[0];// 取最大的一个的索引let index = this.top.findIndex(item => item === numTxt);// 默认选中this.active = isUndefined(numTxt) ? 0 : (numTxt < scrollTop ? index : this.num);if (top.offsetTop < scrollTop) {this.mouseShow();} else {this.mouseHide();}}},tabClick(item, index) {this.active = index;let tab = document.getElementById(item.url);tab?.scrollIntoView();},mouseShow() {let flag = this.$refs["nav-box"];flag.style.opacity = '1';flag.style.zIndex = '2004';},mouseHide() {let flag = this.$refs["nav-box"];flag.style.opacity = '0';flag.style.zIndex = '-1';}}
}

应用:

提示:这里我是写在全局的layout里面,因为的的项目用的地方比较多。可根据自己的项目更改

import leftMenu from '@/components/LeftTabs/leftMenu'<leftNav :menu="menuList":startMouse="start"  v-if="menuList!==''"
/>export default {data() {return {menuList:leftMenu[this.$route.name],start:this.$route.name,show: true}},components: {leftNav},mounted() {this.getList();},watch: {$route: {handler: function () {this.getList();},deep:true},},methods:{getList(){this.menuList = leftMenu[this.$route.name] || "";this.start = this.$route.name;}}
}
//id="home" 一定要组建的name<div class="home-top" id="home"></div>//锚点滚动到指定位置,此id需要在json数组中的url定义的一致<div class="home-tab1" id="tab1"></div><div class="home-tab2" id="tab2"></div>

总结:

好记性, 不如乱笔头,记个笔记。
第一:可能自己以后能用到
第二:可能帮助到有需要的人

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

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

相关文章

用Rust生成Ant-Design Table Columns | 京东云技术团队

经常开发表格&#xff0c;是不是已经被手写Ant-Design Table的Columns整烦了&#xff1f; 尤其是ToB项目&#xff0c;表格经常动不动就几十列。每次照着后端给的接口文档一个个配置&#xff0c;太头疼了&#xff0c;主要是有时还会粘错就尴尬了。 那有没有办法能自动生成colu…

【CDC】跨时钟域处理方法总结一

文章目录 一、概述1.异步时序2.亚稳态与建立保持时间 二、跨时钟域处理1.控制信号的跨时钟域处理&#xff08;单bit数据&#xff09;a.慢时钟域到快时钟域b.快时钟域到慢时钟域握手“扩宽”快时钟域脉冲时钟停止法窄脉冲捕捉电路 2.数据信号的跨时钟域处理&#xff08;多bit数据…

Could not locate supplied template: react+ts搭建

1. reactts创建 我们在是用下create-react-app之前要下载一下 npm install create-react-app -g使用一下命令创建ts的react框架 create-react-app my-app --scripts-versionreact-scripts-ts 2. 遇见问题 我们用以上创建之后会提示一段代码选择“Y”之后发现我们创建的项目…

目标检测任务中常用的数据集格式(voc、coco、yolo)

一、Pascal VOC VOC数据集(Annotation的格式是xmI) Pascal VOC数据集是目标检测的常用的大规模数据集之一&#xff0c;从05年到12年都会举办比赛&#xff0c;比赛任务task&#xff1a; 分类Classification目标检测Object Detection语义分割Class Segmentation实例分割Object…

基于PHP校园疫情防控信息管理系统-计算机毕设 附源码12057

PHP校园疫情防控信息管理系统 摘 要 如今计算机行业的发展极为快速&#xff0c;搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用&#xff0c;其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来&…

ES6及以上新特性

ES6&#xff08;ECMAScript 2015&#xff09;及以上版本引入了许多新特性&#xff0c;每个版本都有不同的增强和改进。以下是 ES6 及以上版本的新特性的详细描述&#xff1a; ES6&#xff08;ECMAScript 2015&#xff09;&#xff1a; let 和 const 声明&#xff1a;引入块级作…

【嵌入式学习笔记】嵌入式入门2——中断(外部中断)

1.什么是中断 打断CPU执行正常的程序&#xff0c;转而处理紧急程序&#xff0c;然后返回原暂停的程序继续运行&#xff0c;就叫中断 1.1.中断的作用与意义 作用1&#xff1a;实时控制在确定时间内对相应事件作出响应——定时器中断作用2&#xff1a;故障处理检测到故障&…

Makefile模板和工程模板(消息队列和共享内存)的使用

一、 Makefile模板 #指定生成的文件名 OJB_OUT test#指定每一个c文件对应的.o文件 OBJS a.o b.o main.o#指定编译器 CC gcc#指定需要的库 ULDFLAGS ########################################### #以下的内容不需要修改 ########################################### all:…

NASA和uAvionix在AAM测试场部署SkyLine C2指挥和控制服务

蒙大拿州比格福克和弗吉尼亚州汉普顿2023年07月28日——美国宇航局和uAvionix签署了一项太空法案协议&#xff0c;为城市环境中的无人机系统 (UAS)开发先进的超视距(BVLOS)指挥和控制(C2)技术。根据协议&#xff0c;NASA将与uAvionix合作&#xff0c;利用基于互联网的基础设施和…

(二)Spring WeFlux响应式编程第二种整合方案|道法术器

Spring WebFlux 响应式异步编程|道法术器(一) Spring WeFlux响应式编程整合另一种方案|道法术器(二) R2dbc操作mysql 注意下面红色部分与上一篇"Spring WebFlux 响应式异步编程|道法术器(一)" 不一样的依赖包 技术整合: <!--设置spring-boot依赖的版本 --> &l…

kafka部署

1.kafka安装部署 1.1 kafaka下载 https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-2.4.0.tgz Binary downloads是指预编译的软件包,可供直接下载和安装,无需手动编译。在计算机领域中,二进制下载通常指预构建的软件分发包,可以直接安装在系统上并使用 "2.…

麒麟-飞腾Kylin-V4桌面arm64系统静态编译QT

1.系统具体版本&#xff1a; 2. 因为此版本的源很老了&#xff0c;需要修改版本的源&#xff0c;才能正常更新各种软件&#xff0c;否则&#xff0c;你连麒麟商店都打不开。 sudo vi /etc/apt/sources.list 选择你系统对应版本的源地址&#xff1a; #4.0.2桌面版本: deb ht…

ModuleNotFoundError: No module named ‘_sqlite3‘

前言 遇到报错信息如下&#xff1a; ModuleNotFoundError: No module named _sqlite3解决方式 参考解决方式&#xff1a; https://blog.csdn.net/jaket5219999/article/details/53512071 find / -name _sqlite*.socp /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36…

uniapp 路由跳转方式

export function goBack(index, url) {if (index 1) { // 关闭当前页&#xff0c;返回上一页面或多级页面。uni.navigateBack({delta: url,animationType: pop-out,animationDuration: 300});} else if (index 2) { // 保留当前页&#xff0c;跳转到非tabbar页面&#xff0c;…

vue拖拽改变宽度

1.封装组件ResizeBox.vue <template><div ref"resize" class"resize"><div ref"resizeHandle" class"handle-resize" /><slot /></div> </template> <script> export default {name: Resi…

【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库

文章目录 1. 用docker-maven-plugin插件推送项目到私服docker1.1. 构建镜像 v1.01.2. 构建镜像 v2.01.3. 推送到镜像仓库 2. 拉取私服docker镜像运行3. 参考资料 本文描述了在Spring Boot项目中通过docker-maven-plugin插件把项目推送到私有docker仓库中&#xff0c;随后拉取仓…

pgsql 查看某个表建立了那些索引sql

执行以下sql&#xff1a; SELECTns.nspname as schema_name,tab.relname as table_name,cls.relname as index_name,am.amname as index_type,idx.indisprimary as is_primary,idx.indisunique as is_unique FROMpg_index idx INNER JOIN pg_class cls ON cls.oididx.indexrel…

小程序相较于APP,广告变现有哪些优势?

对于开发者而言&#xff0c;微信小程序开发门槛相对较低&#xff0c;难度不及APP&#xff0c;能够满足简单的基础应用&#xff0c;适合生活服务类线下商铺以及非刚需低频应用的转换。 和早期相比&#xff0c;今天小程序在产品功能、UI设计、交互体验等方面&#xff0c;越来越精…

【深度学习】MAT: Mask-Aware Transformer for Large Hole Image Inpainting

论文&#xff1a;https://arxiv.org/abs/2203.15270 代码&#xff1a;https://github.com/fenglinglwb/MAT 文章目录 AbstractIntroductionRelated WorkMethod总体架构卷积头Transformer主体Adjusted Transformer Block Multi-Head Contextual Attention Style Manipulation Mo…

在排序数组中查找元素的第一个和最后一个位置——力扣34

文章目录 题目描述法一 二分查找 题目描述 法一 二分查找 int bsearch_1(int l, int r) {while (l < r){int mid (l r)/2;if (check(mid)) r mid;else l mid 1;}return l; }int bsearch_2(int l, int r) {while (l < r){int mid ( l r 1 ) /2;if (check(mid)) l …