更新
2023-01-17: butterfly主题4.6版本已内置此功能,直接在配置文件开启即可。
2023-01-10: 更新百分号不显示的问题。(因本人去掉了百分号但是代码忘记修改便直接粘贴过来了,非常抱歉)
前置条件
如果你不会自定义css和js文件,请看:Hexo博客添加自定义css和js文件
修改源码
我们需要给按钮添加一个元素来存放内容,可以选择使用js插入,不过我还是觉得改源码简单方便。
修改文件themes\butterfly\layout\includes\rightside.pug
,在最下面插入如下两行代码
注意:部分代码中最前面
的加号代表增加,减号代表删除,是为了高亮代码的,粘贴代码之后记得删除。删除之后不需要再补上一个空格,这样会出bug。
1 2 3 4 5
| button#go-up(type="button" title=_p("rightside.back_to_top")) i.fas.fa-arrow-up + span#percent + span 0 + span %
|
添加js
在自定义js文件中加入如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| window.onscroll = percent;
function percent() { let a = document.documentElement.scrollTop || window.pageYOffset, b = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight) - document.documentElement.clientHeight, result = Math.round(a / b * 100), up = document.querySelector("#go-up")
if (result <= 95) { up.childNodes[0].style.display = 'none' up.childNodes[1].style.display = 'block' up.childNodes[1].childNodes[0].innerHTML = result; } else { up.childNodes[1].style.display = 'none' up.childNodes[0].style.display = 'block' } }
|
添加css
在自定义css文件中添加如下代码:
(可以根据需求进行调整)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
button#go-up #percent { display: none; font-weight: bold; font-size: 15px !important; }
button#go-up span:nth-child(2) { font-size: 12px!important; margin-right: -1px; }
button#go-up:hover i { display: block !important; }
button#go-up:hover #percent { display: none !important; }
|
原理讲解
实现原理其实很简单,我们只需要使用 被顶部卷去的高度 / (页面总高度 - 可视高度)
,既可算出百分比。
之所以减去可视高度,是因为当我们在滑到最底部的时候,可以看出 页面高度 = 被卷去的高度 + 可视高度
我画了一个简单的图帮助理解,不想理解的话也无所谓。