记 · 滚动条滚动到指定位置(锚点)的不一样实现方式

最近项目中遇到传统的锚点问题。那什么是锚点问题呢?浏览器

锚点 是网页制做中超级连接的一种,又叫命名锚记。命名锚记像一个迅速定位器同样是一种页面内的超级连接,运用至关广泛。而且能够对网站内容经过菜单进行快速定位。bash

上图所示为锚点示意图,那这种需求咱们怎么实现呢?下面我就来提供一些在不一样场景下,可使用的锚点方式。网站

1.first bloodspa

在传统开发过程当中,咱们的锚点都是经过a标签跳转至对应ID的形式进行需求实现的。code

<a href="#content1">Menu1</a>
<a href="#content2">Menu2</a>

<div id="content1">Content1</div>
<div id="content2">Content2</div>
复制代码

这是a标签提供给咱们的锚点解决方式。cdn

2.double killblog

原生js去获取并修改scrollTopip

这种状况,咱们通常用于固定页面元素的锚点设置,或者设置返回顶部按钮。element

// 经过element.scrollTop来获取当前元素滚动条高度
    // 能够在控制台输出下
    document.documentElement.scrollTop  ====> number  
    // 返回一个number类型的内容,是滚动条的高度
    
    
    // 也能够经过给scrollTop赋值去设置滚动条高度
    // 在控制台输出
    document.documentElement.scrollTop = 0
    // 会发现已经滚动的滚动条,滚动到页面最顶端。
复制代码

在js的世界里,浏览器的兼容性老是让人那么头疼开发

Safari中使用的是 window.pageYOffset IE中是 document.body.scrollTop 以及 document.documentElement.scrollTop;

因此考虑到浏览器兼容性问题,最后总结出一句完美兼容的代码。

// 获取滚动条高度兼容性写法
    var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
复制代码

3.triple kill

Element​.scroll​Into​View() 这个方法在MDN上的解释是实验中的功能,可是亲测主流浏览器是可用,而且出奇的好用。话很少说,直接上代码。

// 将某个元素跳转到浏览器视口的最上方
    element.scrollIntoView() 
复制代码

语法:

// 等同于element.scrollIntoView(true) 
    element.scrollIntoView();
    
    // Boolean型参数
    // true  元素的顶端将和其所在滚动区的可视区域的顶端对齐 ; false 元素的底端将和其所在滚动区的可视区域的底端对齐 
    element.scrollIntoView(alignToTop); 
    
    // 一个带有选项的object:
    // {
    //     behavior: "auto"(默认)  | "instant" | "smooth"(缓动),
    //     block:    "start" | "end",
    // }
    element.scrollIntoView(scrollIntoViewOptions); // Object型参数
复制代码

4.quadra kill

目前来说基本的锚点功能已经实现了,点击menu就会跳转到对应的content

可是看起来仍是有些生硬。咻~ 的一下就过去了,因此加个缓动来提高下用户体验吧。

在你须要滚动的div的样式里面加一句。

scroll-behavior: smooth; // 滚动条缓慢滚动

5.penta kill

到此为止,一个完整的锚点缓慢滚动就完成了,快去试试吧!!!

相关文章
相关标签/搜索