scrollIntoView动画效果

scrollIntoView动画效果经常有这样的需求:点击一个链接(内链)跳转到当前页面中间某个部分。对于这样的需求,很容易想到使用锚点实现。但有一个问题:滚动,太过生硬了,体验极差。我还是比较喜欢平滑滚动。HTML5中提供了CSS属性 scroll-behavior 并且修改了一系列滚动函数的可接受参数用于支持平滑滚动特性。scroll-behavior这个CSS属性就只接受两个自定义值:auto 和 smo…

大家好,又见面了,我是你们的朋友全栈君。

经常有这样的需求:点击一个链接(内链)跳转到当前页面中间某个部分。对于这样的需求,很容易想到使用锚点实现。但有一个问题:滚动,太过生硬了,体验极差。

我还是比较喜欢平滑滚动。HTML5 中提供了 CSS 属性 scroll-behavior 并且修改了一系列滚动函数的可接受参数用于支持平滑滚动特性。

scroll-behavior

这个 CSS 属性就只接受两个自定义值:auto 和 smooth。默认值为 auto,表示立刻滚到底;smooth 即表示平滑滚动。这个属性会影响滚动函数 scrollToscrollIntoView 等的默认滚动行为,也会影响 scrollTopscrollLeft 等 DOM 属性改变时的滚动行为。如果 scroll-behavior 被设置在根元素(<html>)上,表示应用在视口(viewport)上。这时对锚点、内链触发的视口滚动同样有效。

所以只需要给 html 元素设置样式 scroll-behavior: smooth 点击内链就会触发页面的平滑滚动,很简单。

scrollIntoView

上面说到:scroll-behavior 是指定滚动函数的默认行为,这其中就包括 scrollIntoView。顾名思义:这个函数就是把某个元素滚动到窗口的可见区域。

它接受两种形式的值:布尔值或对象。接受布尔值主要还是为了兼容不支持平滑滚动(老版)的浏览器。我们这里只说对象值。

{
  behavior: "auto" | "instant" | "smooth", // 默认 auto
  block: "start" | "center" | "end" | "nearest", // 默认 center
  inline: "start" | "center" | "end" | "nearest", // 默认 nearest
}

对象可以有三个参数。

  1. behavior 表示滚动方式。auto 表示使用当前元素的 scroll-behavior 样式。instant 和 smooth 表示 直接滚到底 和 使用平滑滚动
  2. block 表示块级元素排列方向要滚动到的位置。对于默认的 writing-mode: horizontal-tb 来说,就是竖直方向。start 表示将视口的顶部和元素顶部对齐;center 表示将视口的中间和元素的中间对齐;end 表示将视口的底部和元素底部对齐;nearest 表示就近对齐。
  3. inline 表示行内元素排列方向要滚动到的位置。对于默认的 writing-mode: horizontal-tb 来说,就是水平方向。其值与 block 类似。

可惜的是,目前浏览器支持度欠佳。而 scroll-behavior 作为一个 CSS 属性,不能被 polyfillscrollIntoView 作为一个 JavaScript 函数对 polyfill 很友好。在目前的情况下,推荐使用 scrollIntoView 加 polyfill 的方式。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150112.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 再学C++ Primer(11)-模板与泛型编程

    再学C++ Primer(11)-模板与泛型编程

    2021年8月22日
    48
  • jquery checkbox 选中方法「建议收藏」

    jquery checkbox 选中方法「建议收藏」方法一:if($(“#checkbox-id”)get(0).checked){//dosomething}方法二:最佳if($(‘#checkbox-id’).is(‘:checked’)){//dosomething}方法三:if($(‘#checkbox-id’).attr(‘checked’)){//dos

    2022年7月15日
    18
  • KNN 回归算法_DTW算法

    KNN 回归算法_DTW算法KNN算法也能够用于回归预测。KNN算法用于分类的方法如下:首先,对于一个新来的预测实例,我们在训练集上寻找它的最相近的K个近邻;然后,采用投票法将它分到这K个邻居中的最多的那个类。但是,怎么将KNN算法用于回归呢?其实大致的步骤是一样的,也是对新来的预测实例寻找K近邻,然后对这K个样本的目标值取均值即可作为新样本的预测值。…

    2022年8月21日
    14
  • 怎么查看线程的状态及interrupt优雅的关闭线程和interrupt()、interrupted()、isInterrupted()的作用以及区别在哪?

    怎么查看线程的状态及interrupt优雅的关闭线程和interrupt()、interrupted()、isInterrupted()的作用以及区别在哪?示例:查看状态:刚才我们讲过,一个线程里面任务正常执行完毕,状态就是TERMINATED,就是终止状态。但是,如果我线程里面的任务一直没有执行完成,我想去终止这个线程,或者我给点信息给到线程里,告诉线程我想终止结束呢!所以我可以强制去关闭线程:线程提供一个stop方法,该方法不建议使用,已经过时了!!因为stop是强行关闭线程,线程里面的任务都不在执行,不管线程的任务是否执行成功与否,就算执行到一半也会强制关闭!导致很多不可控制的结果,比如支付付一半等等!!所以我们要需要去优雅的关闭。什么叫做优雅关

    2025年7月29日
    4
  • es面试题及答案_elk面试题

    es面试题及答案_elk面试题文章目录1、Elasticsearch了解多少,说说你们公司ES的集群架构,索引数据大小,分片有多少,以及一些调优手段。2、Elasticsearch的倒排索引是什么?3、Elasticsearch索引数据多了怎么办,如何调优,部署?4、Elasticsearch是如何实现master选举的?5、详细描述一下Elasticsearch索引文档的过程。6、详细描述一下Elasticsearch搜索的过程?7、Elasticsearch在部署时,对Linux的设置有哪些优化方法?8、lucence内部结构是什

    2025年11月8日
    2
  • 2015年最新Android基础入门教程目录(完结版)

    2015年最新Android基础入门教程目录(完结版)2015年最新Android基础入门教程目录(完结版)前言:关于《2015年最新Android基础入门教程目录》终于在今天落下了帷幕,全套教程共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享以及一些疑问等可戳:下面是本系列教程的完整目录:

    2022年5月2日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号