CSS学习笔记-实现滚动进度条效果
准备
在切入正题之前,先看两个与之相关的知识点:
calc()
用于动态计算长度值
支持的版本:css3
需要注意的是:
运算符前后都要保留一个空格,例如:
1
width: calc(100% - 10px);
任何长度都可以使用calc()函数进行计算
calc()支持“+”,“-”,“*”,“/”运算
calc()函数遵循数学运算优先级规则
vh
相对于视口的高度
视口被均分为100个单位的vh
例如:
1 | .bw { |
如果此时的视口高度为100px,那么上述的示例中的字体大小为(16/100) * 100,既为16px
JS实现形式

如图,可以看到滚动提示条的实现是通过控制scroll-line的宽度。也就是在滚动内容的时候,width的值从0%变化到100%,而要实现这一点,就得知道两个参数:
- 文档的高度
document.body.scrollHeight || $(document).height() - 可视区域的高度
document.body.clientHeight || $(window).height()
如下图所示:

文档高度和视口高度有一个差值max,而这个值是需要滚动的值,简单理解就是scroll-line宽度为100%时的值。这样我们就知道了,整个文档滚动的最大值。另外,我们还需要知道滚动条滚动的距离$(window).scrollTop(),有了这两个值,我们就可以算出进度条当前的宽度($(window).scrollTop() / ($(document).height() - $(window).height())) * 100%

CSS实现形式
首先,为了实现进度提示条的功能得用到线性渐变
拓展
1、要获取当前页面的滚动条的纵坐标的位置,应该用:
1 | document.documentElement.scrollTop |
之所以不用document.body.scrollTop的原因是documentElement对应的是html标签,而body对应的是body标签
2、关于document.body和document.documentElement的区别
body是DOM对象中body的子节点,即
标签,而documentElement是整个节点树的根结点,即标签。即document.body.clientHeight获取到的是body的高度,而document.documentElement.clientHeight获取到的是 整个html的高度,然而当文档处于怪癖模式下时,我们使用document.documentElement.scrollTop获取到属性的值是为0的,而在w3c标准文档模式下,document.body.scrollTop的值是为0的,因此为了好的兼容性,我们可以这样写:
var top = document.documentElement.scrollHeight || document.body.scrollHeight