vue项目实现锚点定位功能

2023-11-12

背景

在html中使用id可以简单实现锚点坐标功能,如下:

// 起点
<a href="#mark">起点</a>


// 终点
<div id="mark">终点</div>

但是此时在url中会添加mark

不直接用以上方法的原因主要有二:

1.它影响路径,如果做数据提交或其他需要获取当前路径的操作时,会有影响;

2.项目需求是有个滚动的效果,这种直接跳转的对应模块的方法虽然很快,但是体验不够好(个人感受)

综上,要寻求新的解决办法

 

以下是条件和需求

条件:vue项目+element-ui框架

需求:在同页面上实现锚点定位功能,并且有一个滚动到目标点的过程

 

解决办法

首先来了解两个属性

offsetTop:当前元素顶部距离最近父元素顶部的距离,和有没有滚动条没有关系。单位px,只读元素

scrollTop:在有滚动条时,滚动条向下滚动的距离也就是元素顶部被遮住部分的高度。在没有滚动条时scrollTop==0恒成立。单位px,可读可写

通俗来说,当我们对body元素设置scrollTop值时,窗口顶部会滚动到值的位置

解决思路很简单,给scrollTop赋目标点的offsetTop值,即可实现锚点定位功能

如何实现滚动效果呢?

设计一个函数,每隔一段时间修改一次scrollTop的值,递归调用此函数,直到scrollTop等于offsetTop,停止调用

起点:

 

目标点:

 

滚动方法:

 

后话(2021/05/06更新)

其实完全可以脱离vue的背景实现以上的功能,本身就接近原生js的实现了。另外如果使用的是jq,可以调用以下特定方法做滚动跳转:

function jump(value) {
  var name = "#" + value
  $("html,body").animate({ scrollTop: $(name).offset().top }, 1000)
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue项目实现锚点定位功能 的相关文章

随机推荐

  • Python文件读写和函数编程

    文件读写 在Python中 文件的操作应用非常多 比如大数据领域 涉及许多数据处理请求 基本上都是从一个文件对数据进行分析 抽取 重写进行梳理数据 文件的读写分几步 如何把大象放冰箱 下面我们来拆分下 打开文件 python中打开文件使用o
  • 生成进度条(动态生成文件,并前端显示生成进度)

    注 1 本文是以生成txt文件为例子 2 写的主要是一个思路 不一点非要是生成txt 可以是其他类型文件 3 本文例子的项目地址 https github com smallsnail wh wh 思路 在前端显示 需要拿到生成的进度 百分
  • 正向代理与方向代理的区别

    之前工作用到了nginx 很好理解反正代理 但是正向代理一直困扰这我 今天终于拨开乌云见晴天 正向代理 代理的是客户端 比如 我不能访问公司的内网 然后使用了vpn登录到跳板机 最后成功访问了就是正向代理 反向代理 代理的是服务端 比如 我
  • 模块独立性的度量(耦合度和内聚度)

    模块独立性的度量 从两个方面来度量模块之间的独立性 这两个概念是模块的耦合度和模块的内聚度 耦合度 耦合度分为 独立耦合 数据耦合 控制耦合 公共耦合 和 内容耦合 独立耦合 指两个模块之间彼此完全独立 没有直接联系 他们之间的联系仅仅在于
  • pandas中pd.read_excel()的用法

    人们经常用pandas处理表格型数据 时常需要读入excel表格数据 很多人一般都是直接这么用 pd read excel 文件路径文件名 再多一点的设置可能是转义一下路径中的斜杠 一旦原始的excel表不是很规整 这样简单读入势必报错 其
  • Ain_电脑所有乱码文字集

    以下是所有电脑上可显示的汉字 谁要是用哪个又通过输入法输不出来 可以从这里找 很简单 就是把int的 19968 至 40869 的数字按字符输出即可 19968 一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟 20000
  • Spring IOC 容器详解

    目录 1 容器的概念 2 如何配置元数据 3 如何实例化一个容器 4 使用容器 1 容器的概念 ApplicationContext 代表 Spring IoC 容器 它负责 Spring Beans 的实例化 配置和组装 容器通过读取配置
  • 查看显卡型号命令

    nvidia smi L 结果
  • 自然语言处理中的Character Embedding技术

    在2013年的时候 Tomas Mikolov提出了word embedding技术来更好的表示一个单词的向量 也就是word2vec 在当时也获得了语法和语义相似度上最好的结果 之后关于doc2vec也被提出来 由此word和doc都有了
  • python 爬虫起步 图片

    import urllib request import gevent from gevent import monkey monkey patch all def download img name img url ret urllib
  • c++ 类

    设计一个Per类 类中包含私有成员 姓名 年龄 指针成员身高 体重 再设计一个Stu类 类中包含私有成员 成绩 Per类对象 p1 设计这两个类的构造函数 析构函数和拷贝构造函数 include
  • 水平分割和毒性逆转的作用

    水平分割和毒性逆转主要是针对动态路由协议RIP中 避免路由环路 提高收敛速度产生的 水平分割产生原因 产生环路的一种情况是 路由器A将从路由器B学习到的路由信息又告诉给了路由器B 最终 路由器B认为通过路由器A能够到达目标网络 路由器A认为
  • 「自控元件及线路」1.1 直流电动机概述

    本节介绍直流电动机的工作原理和基本结构 本节介绍电枢绕组的环形 鼓形结构 波绕组和叠绕组 本节介绍直流电机的换向 文章目录 电机概述 直流电机工作原理 直流电机的额定值 直流电机的基本结构 主磁极 电枢绕组 电枢绕组的绕法 环形绕组 鼓形绕
  • vue 组件清除定时器的问题

    我在a页面写一个定时 让他每秒钟打印一个1 然后跳转到b页面 此时可以看到 定时器依然在执行 这样是非常消耗性能的 如下图所示 解决方法1 首先我在data函数里面进行定义定时器名称 data return timer null 定时器名称
  • ubuntu如何添加一个网卡作为桥接网卡,实现使用双网卡来通过网络与开发板联系

    1 虚拟机如何上网 如何通过网络和开发板联系 双网卡解决 1 NAT网卡 虚拟网卡 2 桥接网卡 真实网卡 NAT网卡用于解决虚拟机上网 桥接网卡用来保证ubuntu可以与开发板互通 注 桥接网卡不是虚拟的 需要真实的网卡 这里建议usb网
  • 彻底卸载VS2010

    网上说使用vs2010 uninstall utility可以完全卸载VS2010 实测并不能完全卸载VS2010 通过手动一个一个删除VS2010的相关组件又太麻烦 发现一个方便的删除方式 其实VS2010已经提供了删除方法 打开控制面板
  • python对postgresql库读取、写入、长连接、制定DDL

    读取PG数据库 方法一 使用psycopg2 import psycopg2 import pandas as pd database user password host port分别对应要连接的PostgreSQL数据库的数据库名 数据
  • linux下C语言中的flock函数用法 .

    表头文件 include
  • 微信小程序 — 网络封装(基础篇一)

    网络请求类封装 const baseUrl https xxx xx xx export default function reqeust params return new Promise resolve reject gt wx req
  • vue项目实现锚点定位功能

    背景 在html中使用id可以简单实现锚点坐标功能 如下 起点 a href mark 起点 a 终点 div 终点 div 但是此时在url中会添加mark 不直接用以上方法的原因主要有二 1 它影响路径 如果做数据提交或其他需要获取当前