页面内的导航

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cc18868876837/article/details/83998638

经常有这样的需求:有一个类似目录的导航块,点击里面的标题页面会滚动到对应的内容处。
这里提三种实现的方法:

  1. 通过scrollIntoView方法实现:这是自带的方法,可以通过以下方式实现调用document.getElementById('#ID').scrollIntoView(object),其中scrollIntoView()方法接收一个对象作为参数,该对象有3个属性:①behavior(可选),用于定义跳转的动画, 取值可为"auto", “instant” 或 “smooth” ,默认为 “auto”。②block(可选),取值为"start", “center”, “end”, 或 “nearest”。默认为 “center”。③inline(可选),取值为"start", “center”, “end”, 或 “nearest”。默认为 “nearest”。具体可参考:Element.scrollIntoView()
    这个方法有一个缺点:不能控制跳转块的偏移量。因为滚动时内容的顶端是以浏览器可视区域的顶端作为基准,当导航块是固定在顶端的时候,内容会被遮住。
  2. 通过设置scrollTop的值来实现:一般情况下设置document.documentElement.scrollTop = document.getElementById('#ID').offsetTop,也就是获取对应需要跳转的元素顶部离整个文档顶部的距离,然后再将其设置为滚动条滚动的距离即可。对于导航块固定在浏览器顶部的情况,将上面的方法调整一下即可document.documentElement.scrollTop = document.getElementById('#ID').offsetTop - document.getElementById('#nav').clientHeight,也就是滚动的距离减少固定块的高度即可。这种方法较为灵活,可以任意控制滚动条的滚动距离,但是它的滚动时瞬移的,也就是一下子跳到对应的位置,没有一个滚动的动画效果过渡。
  3. 通过scroll-to-element组件来实现:安装该组件,然后通过const scrollIntoElement = require('scroll-to-element')引入,再通过scrollIntoElement('#ID')即可实现跳转。同理,对于导航栏固定在顶部的情况,只要设置负的偏移量(值为固定的单行栏高度)即可:scrollIntoElement('#ID', { offset: -document.getElementById('#nav').clientHeight }),该组件使用简单方便,可以控制偏移量也具有不同的滚动动画效果,该组件的原理跟方法2类似,同样是通过计算元素在文档中的位置来实现跳转。具体可参考:scroll-to-element

猜你喜欢

转载自blog.csdn.net/cc18868876837/article/details/83998638
今日推荐