实现锚点链接点击tab跳转到指定位置 并且滚动鼠标顶部锚点的样式也跟随变化

实现效果如下  不管是点击还是  滚动鼠标 顶部的样式也会跟随变化

点击会跳转到指定的位置 

通过IntersectionObserver 监听是否可见 

下面代码可以直接执行到vue的文件 

<template><div><ul class="nav"><li v-for="tab in tabs" :key="tab.name" :class="{ active: currentTab === tab.name }" @click="scrollToTab(tab)">{{ tab.label }}</li><div class="underline" :style="underlineStyle"></div></ul><div class="section" id="section1">Section 1</div><div class="section" id="section2">Section 2</div><div class="section" id="section3">Section 3</div><div class="section" id="section4">Section 4</div><div class="section" id="section5">Section 5</div></div>
</template><script>
export default {data () {return {currentTab: 'tab1',tabs: [{ name: 'tab1', label: '首页', id: 'section1' },{ name: 'tab2', label: '服务内容', id: 'section2' },{ name: 'tab3', label: '业务案例', id: 'section3' },{ name: 'tab4', label: '关于我们', id: 'section4' },{ name: 'tab5', label: '联系方式', id: 'section5' }],underlineStyle: {width: '0px',left: '0px'}}},methods: {scrollToTab (section) {this.currentTab = section.namethis.updateUnderline()const element = document.getElementById(section.id)document.getElementById(section.id).scrollIntoView({ behavior: 'smooth', block: 'center' })},updateUnderline () {this.$nextTick(() => {const activeTab = this.$el.querySelector('.nav .active')if (activeTab) {this.underlineStyle.width = `${activeTab.offsetWidth}px`this.underlineStyle.left = `${activeTab.offsetLeft}px`}})},handleIntersection (entries) {entries.forEach((entry) => {if (entry.isIntersecting) {const tab = this.tabs.find((tab) => tab.id === entry.target.id)if (tab) {this.currentTab = tab.namethis.updateUnderline()}}})}},mounted () {this.updateUnderline()const options = {root: null,rootMargin: `-${this.$el.querySelector('.nav').offsetHeight}px 0px 0px 0px`,threshold: 0.5}const observer = new IntersectionObserver(this.handleIntersection, options)this.tabs.forEach((tab) => {const section = document.getElementById(tab.id)if (section) {observer.observe(section)}})window.addEventListener('resize', this.updateUnderline)},beforeDestroy () {window.removeEventListener('resize', this.updateUnderline)}
}
</script><style scoped>
.nav {display: flex;position: fixed;top: 0;width: 1000px;background-color: white;z-index: 1000;border-bottom: 1px solid #ccc;
}
.nav li {flex: 1;text-align: center;padding: 10px;cursor: pointer;position: relative;
}
.nav li.active {color: blue;
}
.underline {position: absolute;bottom: 0;height: 2px;background-color: blue;transition: width 0.3s, left 0.3s;
}
.section {height: 300px;padding-top: 60px; /* 留出导航栏的高度 */border-bottom: 1px solid #ccc;
}
</style>

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

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

相关文章

Nvidia Isaac Sim组装机器人和添加传感器 入门教程 2024(5)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …

采购管理系统:反向竞价失败的 6 个常见原因

在当今快节奏和竞争激烈的商业环境中&#xff0c;采购专业人员一直在寻找创新战略来节约成本和简化供应链流程。反向竞价就是其中一种广受欢迎的策略。 反向竞价提供了一种独特的采购方法&#xff0c;允许买家邀请多个供应商参与实时竞标&#xff0c;以争取他们的业务。虽然反…

构建个人文件上传服务:Python Flask实现上传和下载完整指南

介绍 在本教程中&#xff0c;我们将学习如何使用Python Flask框架将文件上传到服务器&#xff0c;并使用SQLite数据库来跟踪上传的文件。我们将提供后端代码和一个示例项目的Git链接&#xff0c;以便您可以轻松地跟随本教程。 准备工作 首先&#xff0c;您需要安装Python和F…

太爱这种数据可视化效果,零售行业的都看过来

在当今数字化浪潮下&#xff0c;数据可视化已成为零售行业洞察市场趋势、优化运营决策的关键技术。奥威BI零售数据分析方案凭借其卓越的数据可视化效果&#xff0c;成为零售企业的得力助手。接下来就通过BI节假日分析报表来简单地感受一下。 注&#xff1a;该BI节假日分析报表…

DDMA信号处理以及数据处理的流程---cfar检测

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

Nacos安装教程(很细很简单),解决启动报错Please set the JAVA_HOME

nacos安装 找到你要下载的版本解压到任意非中文目录下端口默认8848&#xff0c;如有端口冲突&#xff0c;可修改配置文件中的端口。编辑shutdown.cmd文件&#xff0c;路径换成你的jdk安装地址否则会报错Please set the JAVA_HOME variable in your environment, We need java(x…

Manim本地安装

目录 背景Manim安装及配置一个上手例子参考文献 背景 通过上一期的介绍&#xff0c;我们对Manim有了初步的认识也知道Manim版本的区别&#xff0c;这一期&#xff0c;我们来给自己的计算机安装一个社区版ManimCE&#xff0c;方便以后玩Manim。笔者的硬件配置是联想笔记本Windo…

机器学习:人工智能的子领域之一

引言 人工智能&#xff08;AI&#xff09;已经成为现代科技的重要组成部分&#xff0c;推动了许多领域的创新与进步。在人工智能的诸多子领域中&#xff0c;机器学习&#xff08;ML&#xff09;无疑是最关键和最具影响力的一个。机器学习通过自动分析和学习数据中的模式&#x…

JavaScript的学习之强制类型转换

目录 一、什么是强制类型转换 二、其他类型转化为String类型 方式一&#xff1a;调用被转化数据类型的toString()方法 方式二&#xff1a;调用String函数&#xff0c;并将我们要转换的数据添加进去为参数 三、其他类型转化为Number类型 方式一&#xff1a;使用Number()函数…

环境配置04:Pytorch下载安装

说明&#xff1a; 显存大于4G的建议使用GPU版本的pytorch&#xff0c;低于4G建议使用CPU版本pytorch&#xff0c;直接使用命令安装对应版本即可 GPU版本的pytorch的使用需要显卡支持&#xff0c;需要先安装CUDA&#xff0c;即需要完成以下安装 1.查看已安装CUDA版本 GPU对应…

常见的结构型设计模式

设计模式&#xff08;二&#xff09; 常见的结构型模式 1.代理模式: 提供一种代理方法 &#xff0c;来控制对其他对象的访问。在有些情况下&#xff0c;一个对象不能或者不适合直接访问另一个对象&#xff0c;而代理对象可以在这两个类之间起一个中介的作用。 举例&#xf…

Docker容器基础知识,即linux日常运维命令

Docker 是一个流行的用 Go 语言开发的开源项目&#xff0c;基于Linux内核的cgroup、namespace及 AUFS 等技术&#xff0c;对进程进行封装隔离&#xff0c;由 Dotcloud 公司开发。Docker已成为容器行业的事实标准。 小陈发现一个有趣的事情&#xff0c;容器的英文是Container&am…

甘肃的千层烤馍:传统面点的魅力绽放

千层烤馍&#xff0c;作为甘肃美食文化的重要象征&#xff0c;以其独特的外形和丰富的口感&#xff0c;吸引着众多食客。它的外观犹如一件精美的艺术品&#xff0c;层层叠叠&#xff0c;金黄酥脆&#xff0c;散发着诱人的香气。 在甘肃平凉地区制作千层烤馍&#xff0c…

国内大模型/智能体盘点丨16家公司,13款大模型,19个智能体

在当今这个智能化风起云涌的时代&#xff0c;随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Language Models&#xff09;作为推动行业变革的关键力量&#xff0c;正逐步渗透到社会经济的各个角落。 从科技创新的最前沿到日常生活应用的细微之处&#xff0c…

相交链表--力扣160

相交链表 题目思路C代码 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路 求两个链表的相交结点&#xff0c;使用…

ATFX汇市:瑞士央行连续第二次降息,USDCHF猛涨

ATFX汇市&#xff1a;昨日15:30&#xff0c;瑞士央行公布利率决议结果&#xff0c;将政策利率下调0.25个百分点&#xff0c;至1.25%。瑞士央行在政策声明中提到&#xff1a;与上一季度相比&#xff0c;潜在的通胀压力再次下降&#xff1b;瑞士目前的通货膨胀主要是由国内服务价…

成都晨持绪:现在的抖音网店怎么做更快起店

在当今社交媒体的浪潮中&#xff0c;抖音已经成为一个不可忽视的电商平台。对于想要快速起步的抖音网店来说&#xff0c;掌握一些关键策略至关重要。 首要的是定位清晰。你的网店需要有一个鲜明的主题&#xff0c;这可以是某一特定领域的产品&#xff0c;如美妆、服饰或是手工艺…

【C语言】解决C语言报错:Use-After-Free

文章目录 简介什么是Use-After-FreeUse-After-Free的常见原因如何检测和调试Use-After-Free解决Use-After-Free的最佳实践详细实例解析示例1&#xff1a;释放内存后未将指针置为NULL示例2&#xff1a;多次释放同一指针示例3&#xff1a;全局或静态指针被释放后继续使用示例4&am…

力扣1793.好子数组的最大分数

力扣1793.好子数组的最大分数 对于每个数 求其左右两侧小于它高度的元素下标(单调栈) class Solution {public:int maximumScore(vector<int>& nums, int k) {int n nums.size();vector<int> left(n,-1);stack<int> st;for(int i0;i<n;i){while(!…

一文读懂过零检测电路的作用、电路原理图及应用

过零检测电路是一种常见的应用&#xff0c;其中运算放大器用作比较器。它通常用于跟踪正弦波形的变化&#xff0c;例如过零电压从正到负或从负到正。它还可以用作方波发生器。过零检测电路有许多应用&#xff0c;例如标记信号发生器、相位计和频率计。#过零检测电路#可以采用多…