网站添加回到顶部功能

本站用的 hugo clarity 皮肤自带一个回到顶部功能,图标不满意,我给改成了现在的样子,易于识别。‘回到首页’图标一直展示,有点碍事。所以需要优化下,使其默认不显示,只有当滚动条向下滚动一定距离后,超过这个阈值,显示“回到顶部”图标,不超过隐藏。

实现逻辑简单易懂,整个改动如下图所示:

hugo back to top

下面解释下变动

1. 给图标所在元素添加个 id

添加 id 的目的是便于后续操作,控制图标是否显示。变化如下:

 1diff --git a/layouts/partials/top.html b/layouts/partials/top.html
 2index bdaa538..33aade0 100644
 3--- a/layouts/partials/top.html
 4+++ b/layouts/partials/top.html
 5@@ -1,3 +1,3 @@
 6-<a class="to_top" id="toTop" href="#documentTop">
 7-  <img src="/icons/to-top.svg" width="44" height="44" alt="to-top" />
 8-</a>
 9+<a class="to_top" href="#documentTop">
10+  <img src="/icons/to-top.svg" width="44" height="44" alt="to-top">
11+</a>
12\ No newline at end of file

差别是 <a> 标签添加了个 id="toTop"

2. 设置默认隐藏图标

 1diff --git a/assets/sass/_components.sass b/assets/sass/_components.sass
 2index 8a2c398..301844a 100644
 3--- a/assets/sass/_components.sass
 4+++ b/assets/sass/_components.sass
 5@@ -546,7 +546,6 @@ figcaption
 6
 7 .to
 8   &_top
 9-    visibility: hidden
10     background-color: transparent
11     width: 2.75rem
12     height: 2.75rem
13(END)

to_top 属性添加了 visibility: hidden,意思就是默认隐藏,其实元素还是在的,性能好(来回滚动时,不用频繁创建/删除),仍然会影响布局。

3. 添加控制逻辑

 1diff --git a/assets/js/custom.js b/assets/js/custom.js
 2index 54f7fe3..11b1d82 100644
 3--- a/assets/js/custom.js
 4+++ b/assets/js/custom.js
 5@@ -1,11 +1 @@
 6-// add custom js in this file
 7-
 8-window.onscroll = function () {
 9-  var pageOffset =
10-    document.documentElement.scrollTop || document.body.scrollTop;
11-  if (pageOffset > 1000) {
12-    document.getElementById("toTop").style.visibility = "visible";
13-  } else {
14-    document.getElementById("toTop").style.visibility = "hidden";
15-  }
16-};
17+// add custom js in this file
18\ No newline at end of file
19(END)

这个皮肤的自定义 js 代码放在 custom.js 中,原本是空的。上面代码的意思,滚动时执行函数里面的代码,如果垂直方向偏离顶部的偏移量(上卷隐藏了多少)大于 1000 像素(pixels),设置 id 为 toTop 的元素可见,否则隐藏。效果就是往下滚动一段距离,图标显示,反之不显示。

scrollTop 的英文解释:

An element's scrollTop value is a measurement of the distance from the element's top to its topmost visible content. When an element's content does not generate a vertical scrollbar, then its scrollTop value is 0.

还不理解的话,看这个 stackoverflow 回答

scrollTop cat

最后,由于页面锚点“documentTop” 在 body 元素上面,所以点击后就回到了顶部,读者可以滚动本站的页面试试效果。当然,每个网站代码结构不一样,理解原理后,自己可以自行添加此功能,本人非专业前端,这个实现不一定是最佳实践,但对于我来说够用了,分享的目的也是给非专业人员参考。

最后修改于: Monday, August 28, 2023
欢迎关注微信公众号,留言交流。

相关文章:

翻译: