锚点定位方案
创始人
2025-05-31 10:21:57
0

一 背景知识:

1.1 #号的作用

#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print
就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。
为网页位置指定标识符,有两个方法:

一是使用锚点,比如,
二是使用id属性,比如

HTTP请求不包括#.

2.2 a元素与URL对象

URL对象是浏览器的原生对象,可以用来构造、解析和编码 URL。一般情况下,通过window.URL可以拿到这个对象。

元素和元素都部署了这个接口。这就是说,
它们的 DOM 节点对象可以使用 URL 的实例属性和方法。

例如:我们利用a标签来获取一些东西

// 我跳到box1
// 上面时html代码
var a = document.querySelector('a');console.log(a.href); //返回整个 URLconsole.log(a.hash); //返回片段识别符,以井号#开头console.log(a.hostname); //返回域名console.log(a.search); //返回查询字符串,以问号?开头

二 锚点定位含义

锚点其实就是可以让页面定位到某个位置上的点。在高度较高的页面中经常见到。

 // 锚点跳转有两种形式:*1. a标签 + name / href 属性*2. 使用标签的id属性

三 锚点定位实现

1、利用#

缺点:url会发生改变,会在url最后面加上片段识别符#box2,这样就改变了URL的路径,这是我们不想看到的.因为再次刷新的时候回出现问题.

我跳到box1我跳到box2

2、scrollTop.offset

1、这种方法url不会发生改变,阻止了a标签的默认行为.所以a标签不会跳转.
2、 document.querySelector(target).offsetTop;
$(target).offset().top 都是去求出盒子参照body定位对应的top值,这是因为offet家族的定义是:
如果元素自身是非固定定位,并且所有的父元素都没有定位,那么他的定位父级是body .
3、 上面代码的target得到格式都是#box1,此时在原生中利用属性选择器来获取元素要很多.

document.querySelector(target) 等价于
document.querySelector('#box1')

3、srollIntoView

含义

scrollIntoView 是 HTMLElement 集合下的一个 API,每一个 HTML 元素都拥有这个 API。它的作用就和字面意思一样:滚动到可视区。

Element 接口的 scrollIntoView()方法会滚动元素的父容器,使被调用 scrollIntoView()的元素对用户可见。

语法

语法:

element.scrollIntoView(); // 等同于 element.scrollIntoView(true)
element.scrollIntoView(alignToTop); // Boolean 型参数
element.scrollIntoView(scrollIntoViewOptions); // Object 型参数

参数解释:

alignToTop:它是一个 Boolean 值,它用来规定元素出现在可视区后与可视区的对齐方式,为 true 代表顶端对齐,false 代表低端对齐。
scrollIntoViewOptions:它是一个对象,该参数主要是配置元素的动画效果以及位置的,它有一下 3 个属性:
behavior:它定义元素出现在可视区内过程的动画,有 auto 和 smooth 两种选择。
block:定义元素的垂直方向的对齐方式,有"start", “center”, “end”, 或 “nearest” 4 个选项,默认 start。
inline:定义元素水平对齐方式,有"start", “center”, “end”, 或 “nearest"4 个选项,默认"nearest”。

有些小伙伴可能发现两个参数都能定义元素的对齐方式,它们之间有什么联系呢?当 alignToTop 为 true 时,scrollIntoViewOptions: {block: “start”, inline: “nearest”}这是它的默认值,当 alignToTop 为 false 时,scrollIntoViewOptions: {block: “end”, inline: “nearest”}这是它的默认值。

第一段内容

第二段内容

第三段内容

我是第一段内容
我是第二段内容
我是第三段内容

相关内容

热门资讯

C++附加---静态库和动态库... 一、静态库的概念 ①概念:静态库是指在我们的应用中,有一些公共代码是需要...
草四字词语 关于草四字词语  碧绿的草地上,嫩嫩的小草亲密地挤在一起,拉着手儿,织出一块块柔软的地毯。小编整理的...
“能诗会赋”的意思 “能诗会赋”的意思 成语拼音: [néng shī huì fù] ...
“酒囊饭袋”的意思 “酒囊饭袋”的意思 成语拼音: [jiǔ náng fàn dài] ...
泰山梁木成语解析 泰山梁木成语解析  【成语】:泰山梁木  【拼音】:tài shān liáng mù  【简拼】:...
Docker: 容器如何访问w... 一、使用背景: 1、项目中使用到srs作为流媒体服务器 2、测试阶段时,...
优化软件测试成本,7个步骤简单... 【图源CSDN】软件测试可以防止那些修复起来成本很高的错误,从而避免将来因为它们所导致...
“秀水明山”的意思 “秀水明山”的意思 成语拼音: [xiù shuǐ míng shān] ...
地无遗利成语解释 地无遗利成语解释  成语是汉语词汇中定型的词。下面是小编整理的.地无遗利成语解释,希望对大家有所帮助...
“从头到尾”的意思 “从头到尾”的意思 成语拼音: [cóng tóu dào wěi] ...
“不足挂齿”的意思 “不足挂齿”的意思 成语拼音: [bù zú guà chǐ] ...
一文教会你Jenkins 主从... 目录 背景 添加Slave节点 连接Slave节点 Jenkins任务配置Slave节点执行 可能...
大文件上传 上图就是大致的流程一、标题图片上传课程的标题图片Ajax发送请求到后端后端接收到图片使用IO流去保存...
同样是软件测试岗位,年薪只比我... 相信大家听过网上流传的一句话: 35岁前当经理,35岁后开滴滴。 疫情当...
Springboot+vue开... 前言图书借阅管理系统项目是基于SpringBoot+Vue技术开发而来,功能相...
谈谈你的GC调优思路 第28讲 | 谈谈你的GC调优思路? 我发现,目前不少外部资料对 G1 的介绍大多还...
“百废俱举”的意思 “百废俱举”的意思 成语拼音: [bǎi fèi jù jǔ] ...
“汗流浃踵”的意思 “汗流浃踵”的意思 成语拼音: [hàn liú jiā zhǒng] ...
“深恶痛疾”的意思 “深恶痛疾”的意思 成语拼音: [shēn wù tòng jí] ...
春天花香的词语 关于春天花香的词语  花香气来自薄壁组织中许多油细胞,那么,形容春天花香词语有哪些呢?下面小编为大家...