React 前端导航

使用锚点定位到网页的指定位置,设置偏移量错开一些固定布局的元素

使用锚点定位到网页的指定位置,设置偏移量错开一些固定布局的元素

我们常用的锚点实现方式有几种:a 标签跳转,直接修改 url 的 hash 值,使用 scrollIntoView 方法,使用 window.scrollTo 方法。

对于一些特殊的场景,我们会有一些元素固定到页面的顶部,比如导航栏,工具栏之类的,这种场景下我们的锚点定位时元素会与固定元素重叠,导致锚点定位不准确的错觉,像使用a 标签跳转和直接修改 url 的 hash 值以及 scrollIntoVIew 定位到顶部时都会有这种问题。

这种情况下就需要设置偏移量,让锚点元素与固定元素错开,以达到定位准确的效果。

a 标签锚点以及直接修改 url 的 hash 值实现锚点

借鉴被别人的方式,给目标元素设定 padding 和 margin 来偏移锚点元素,示例代码如下:

// html 代码
<a href="#box">box</a>
<div class="box" id="box">
    1<br />2<br />
</div>

// css 代码
.box {
  padding-top: 50px;
  margin-top: -50px;    
}

但是我试了下,在我的项目里面没有效果,我同事写了个demo倒是可以达到偏移的效果,没有去细究我项目里面不行的原因,直接使用了window.scrollTo 方法来实现,没毛病。

使用 scrollIntoView 方法实现锚点

scrollIntoView 支持三种定位方式:

  • start:元素的顶端将和其所在滚动区的可视区域的顶端对齐
  • center:元素的中间位置将和其所在滚动区的可视区域的中间位置对齐
  • end:元素的底端将和其所在滚动区的可视区域的底端对齐
  • nearest:

具体方法参数可参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView

此方式不能配置具体的偏移量,只能是上中下三个位置,灵活性不够,也不能实现我们的需求

使用 window.scrollTo 方法实现锚点

可以指定具体的偏移量,示例代码如下:

 const headerOffset = 120;
 const elementPosition = element.getBoundingClientRect().top;
 const offsetPosition = elementPosition + window.pageYOffset - headerOffset;

 window.scrollTo({
   top: offsetPosition,
   behavior: 'smooth',
 });

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:farmerlzj@163.com。 本站原创内容未经允许不得转载,或转载时需注明出处: 内容转载自: React前端网:https://qianduan.shop/blogs/detail/64

#js#锚点定位#定位偏移

相关推荐

原型与原型链、继承

原型与原型链、继承简单实现

浏览器中的js事件循环(Event loop)

本文将简述浏览器中的js事件循环机制,帮助我们理解浏览器环境js代码是如何运行的。Javascript的一大特点是单线程,也就意味着同一时间他只能做一件事。事件循环(Event Loop)是为了协调事件,用户交互,UI渲染,网络处理等行为,防止线程阻塞而诞生的。