vue:实现锚点双向滚动/文章章节联动滚动效果

news/2024/4/29 3:41:50/文章来源:https://blog.csdn.net/qq_36604536/article/details/126936016

需求描述

需要实现类似doc中文档大纲的效果,点击对应章节的名称时定位到相应的正文;而当正文滚动时,高亮显示对应的章节名称
章节联动效果图

实现思路

其实笔者一开始想到的是利用a标签页内跳转(也就是“锚点”),类似于Element-UI官方文档:单选框组
当鼠标悬浮到页内某一章节名称时,会显示符号为“¶”的锚点,点击锚点会在网页链接后拼接对应hash值实现页内跳转
饿了么UI官方文档-锚点实现页内跳转
但仅靠锚点难以实现滚动页面内容时,定位到对应章节名称。。还是得靠度娘
经过了一番搜索与尝试,我发现所有标注了“vue锚点双向滚动”的文章实际都采用了监听滚动/滚动页面的实现思路和“锚点”其实并无关联。。,总之,笔者最终翻到了这篇锚点双向定位博客,虽然原文的示例代码稍显粗糙,但这篇的本质其实就是经过个人润色的那篇博客哦☆♦☆!

示例代码

请在你本地引入了Element-UI的项目中,新建一个test.vue来运行以下示例代码~

<!--* @Author: smm* @Date: 2022-09-19 15:33:32* @LastEditors: smm* @LastEditTime: 2022-09-19 17:27:08* @Description: 章节联动滚动示例
-->
<template><div class="sectionTest"><div><el-radio-groupv-model="sectionIdx"@change="change"><el-radiov-for="(item, index) in sectionList":key="item":label="index">{{ item }}</el-radio></el-radio-group></div><divclass="contentBlock"@scroll="scrollEvent"><divv-for="item in sectionList":key="item"class="content">{{ `正文:${item}` }}</div></div></div>
</template><script>
export default {name: ``,data () {return {sectionList: [`第一章`, `第二章`, `第三章`, `第四章`, `第五章`], // 章节标题列表sectionIdx: 0 // 当前的章节下标}},methods: {change () {let contents = document.querySelectorAll('.content')contents[this.sectionIdx].scrollIntoView({ block: 'start', behavior: 'smooth' })},scrollEvent (e) {const { sectionList } = thislet contents = document.querySelectorAll('.content')let nowTop = e.target.scrollTop // 滚动条目前的滚动距离let firstTop = contents[0].offsetTop // 第一个章节的顶部位置let idx = nulltry { // forEach循环只能通过抛出异常的方式终止sectionList.forEach((section, index) => {let contentTop = contents[index].offsetTop // 第index个章节的顶部位置let scrollDistance = contentTop - firstTop // 从第一个章节到第index个章节的滚动距离if (nowTop <= scrollDistance) {// 滚动条已滚动的距离少于第index个章节需要的滚动距离,说明当前正文处于第(index-1)的章节idx = Math.max(0, index - 1)throw new Error(`find section:${this.sectionIdx}`)}})} catch (e) { }// 滚动到最后一章(该章节高度超过正文容器)时,滚动条的滚动距离超过所有章节需要的滚动距离this.sectionIdx = idx === null ? sectionList.length - 1 : idxif (e.srcElement.scrollTop + e.srcElement.offsetHeight === e.srcElement.scrollHeight) {// 滚动条触底,处于最后一章(消除该章节高度低于正文容器时始终定位在倒数第二章的情况)this.sectionIdx = sectionList.length - 1}}}
}
</script><style lang="scss">
.sectionTest {height: 500px;background: #fff;padding: 0 20px;.contentBlock{height: 400px;overflow-y: auto;&::-webkit-scrollbar {width: 10px;height: 10px;}&::-webkit-scrollbar-thumb {background:#ccc;border: 1px solid green;border-radius: 5px;}&::-webkit-scrollbar-track {background: #666;border-radius: 5px;}}.content {border: 1px solid red;margin: 10px 0;color: orangered;&:nth-child(even) {height: 500px;background: #aaa;}&:nth-child(odd) {height: 300px;background: #eee;}}
}
</style>

参考网址

[1] 锚点双向定位
[2] Element-UI单选框组
[3] Js中forEach跳出本次循环和终止循环

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

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

相关文章

我惊了,花重金求来的并发编程笔记,颠覆了我以往“正确“的认知

对于一个 Java 程序员而言&#xff0c;能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是 Java 语言中最为晦涩的知识点&#xff0c;它涉及操作系统、内存、CPU、编程语言等多方面的基础能力&#xff0c;更为考验一个程序员的内功。那到底应该怎么学习并发编…

每周一坑--阿里云欠费之网站504

阿里云欠费之网站504想不到周一就遇到大坑,网站访问不了,堡垒机远程登录不上服务器,只能控制台操作。   我详细描述下现象,希望大家不要踩前人的坑~(我可是以写故障报告为代价的 = =) 现象:该网站因为接入到WAF上,所以80、443端口只对WAF段开放,排查过程中,我一度以…

浅谈java单元测试框架junit4/5

0 前言 junit是一个开源的Java语言的单元测试框架。目前junit主要有版本junit3&#xff0c;junit4和junit5。因在junit3中&#xff0c;是通过对测试类和测试方法的命名来确定是否是测试&#xff0c;且所有的测试类必须继承junit的测试基类TestCase&#xff0c;所以本文不再讨论…

c++11 map自定义key

文章目录一、map简介二、自定义key三、demo演示四、自定义模板参数总结参考资料一、map简介 map一般采用红黑树存储数据&#xff0c;是一种映射类型的关联容器&#xff0c;map中的元素是关键字 - 值&#xff08;key-value&#xff09;对&#xff1a;关键字起到索引的作用&…

物联网威胁监测系统最新发现一款针对IoT设备的RAT远控木马

一、背景概述 2022年7月20日&#xff0c;天穹威胁监测系统监测到IoT蜜罐系统中的D-Link Dir 817LW路由器遭受来自澳大利亚IP的攻击。系统显示目标设备被攻击成功&#xff0c;并且下载了恶意样本。实验室相关人员第一时间对该攻击事件样本进行分析&#xff0c;发现该次攻击投递…

【新学期 新Flag】新方向 新动力

暑假结束&#xff0c;新学期开始&#xff0c;快来立下你的Flag吧&#xff01; 一、自我介绍 本人来自陕西某大学计算机科学与技术专业的一名学生&#xff0c;作为一个创作者&#xff0c;在CSDN写文章&#xff0c;记录下自己学习的过程&#xff0c;通过社区互相交流&#xff0…

ESXi重置密码以及修改网络IP地址的方法

Study From https://www.cnblogs.com/mk21/p/15784082.html前期公司有部分虚拟化的服务器因为只通过vCenter进行管理. 导致密码遗失. 最近因为公司的服务器要切换IP地址, 发现没有密码无法进行修改,比较难处理. 为了能够将网络进行正常的迁移. 从网上找到了个比较简单的重置…

某大型保险集团在线财险业务系统数据库存储架构由集中式向分布式转型实践

【摘要】随着某机构业务自传统B2B类型向互联网的转变,访问量的激增、用户量持续爆炸式增长、数据量爆炸式增长,业务场景具备高吞吐量、高并发量等等新需求,这些都要求后台数据库具备支持高TPS、高QPS(每秒的查询量)以及支持高并发量的能力。传统的集中式存储架构已不适应新…

美化页面元素

目录 1、为什么要美化网页 span标签&#xff1a; 2、字体样式 &#xff08;1&#xff09;选择字体 font-family &#xff08;2&#xff09;font-size 字体大小 &#xff08;3&#xff09;font-weight 字体粗细 &#xff08;4&#xff09;color 字体颜色 连着写 扩展&am…

kafka和flink的入门到精通 1 大数据时代,分布式数据存储,数仓

参考006 - 大数据 - 系统架构 - 总览_哔哩哔哩_bilibili 目录 一、大数据时代 ◼ 信息化浪潮 ◼ 技术支撑 ◼ 三阶段 ◼ 大数据的发展历程 二、大数据概述 ◼ 大数据 特点&#xff1a; ◼ 大数据部门组织 三、分布式数据存储 ◼ 单点数据存储 ◼ 主从架构模式 ◼…

知物由学 | AI与黑产的攻守之道,详解攻击类文字图像的检测

导读&#xff1a;随着 OCR 系统识别能力的提升&#xff0c;专业对抗 OCR 的黑产也越来越多&#xff0c;这个过程中 AI 如何抵御黑产攻击类的文字图像&#xff1f;本文通过分享相似性特征训练的常见算法&#xff0c;并选择了其中一些有代表性的工作进行介绍&#xff0c;希望能给…

数据库干货 | 防止重复记录的发生

许多数据库管理员&#xff08;DBA&#xff09;需要至少花费一段时间来尝试从数据库表中识别和删除重复记录。如果一开始多注意防止重复插入&#xff0c;那么识别和删除重复记录所花费的大部分时间都可以用于其他工作上。原则上&#xff0c;这并不难做到。但是&#xff0c;实际上…

Windows环境下Hadoop的安装和配置

Windows环境下Hadoop的安装和配置Windows环境下Hadoop的安装和配置平台及版本安装 Java1.8&#xff0c;并配置环境变量安装Hadoop2.7.3Hadoop核心配置文件启动Hadoop服务Windows环境下Hadoop的安装和配置 平台及版本 Windows10JDK1.8.0_192Hadoop2.7.3 安装 Java1.8&#xf…

Java Math

本博客具体总结了java中的api Math中部分函数使用方法&#xff1a; 取绝对值 Modifier and TypeMethod and Descriptionstatic doubleabs(double a) 返回一个 double值的绝对值。static floatabs(float a) 返回一个 float值的绝对值。static intabs(int a) 返回一个值的绝对值…

卜算法学习笔记-02-分而治之算法02

数组中的逆序对计数 算法分析 所谓逆序对&#xff0c;是指数组中的两个元素 A[i]A[i]A[i] 和 A[j]A[j]A[j]&#xff0c;其下标 i<ji < ji<j&#xff0c;但是考察元素的值&#xff0c;却有 A[i]>A[j]A[i] > A[j]A[i]>A[j]。 输入&#xff1a;一个包含 nnn 个…

vue项目实战-完成路由组件的搭建

vue项目实战-完成路由组件的搭建 1.安装vue-router npm i vue-router --save分析结构可知&#xff0c;路由组件有四个&#xff1a;Home、Search、Login、Register 2.创建路由组件文件夹pages以及各路由组件 3.配置路由 项目中配置路由一般配置在router文件夹中&#xff0c;…

工业智能网关BL110应用之八十一: 实现西门子S7-400 PLC 接入亚马逊云平台

LAN 接口的配置COM口采集西门子S7-400 PLC的配置 工业智能网关BL110一共有一 个LAN 接口&#xff0c;一个WAN接口&#xff0c;可以通过LAN 接口采集数据&#xff0c;通过WAN接口接入局域网&#xff0c;设置过程不一样&#xff0c;WAN接口可以自动获取IP以及相关以太网设置。 …

硅光电子器件模拟:“RSoft光电器件设计仿真技术与应用”

RSoft光子器件工具包括业界最广泛的模拟器和优化器&#xff0c;一款非常优秀的设计仿真软件&#xff0c;能够帮助用户轻松的设计光学元件、纳米级光学结构&#xff0c;同时也可以模拟无源或有源的光电子器等。RSoft具有高度精确的算法能快速建立虚拟样机&#xff0c;同时降低了…

FPGA 20个例程篇:15.VGA显示八种颜色的彩条

第六章 图像显示处理&#xff0c;经典再现 15.VGA显示八种颜色的彩条 图像和视频处理可以说是FPGA中又一个经典地应用&#xff0c;使用FPGA做图像处理最核心的优势就在于&#xff1a;FPGA能进行实时流水线运算&#xff0c;从而达到更高的实时性&#xff0c;围绕着图像处理又有…

【VUE】process.env,require,vite.config.js等问题的解决

一、简介 这个系列是想将自己做过的Cesium项目整理回顾&#xff0c;同时也希望能给看到的文章的朋友一点帮助。大部分内容规划都是简单的功能应用&#xff0c;后面可能会选我自己感兴趣的功能做分享。 本文主要介绍工程的技术选型&#xff0c;环境搭建和代码的简单实现。首先…