发布于 2026-01-06 13 阅读
0

原生 JavaScript 中的返回顶部按钮(入门) 使用原生 JavaScript 实现返回顶部按钮 返回顶部

原生JS中的返回顶部按钮(入门级)

使用原生 JavaScript 的“滚动到顶部”按钮

返回顶部

返回顶部按钮是网站上非常常见的用户体验功能。它的目的是避免用户被迫向上滚动页面,尤其是在移动设备上。在本简短教程中,我们将学习如何使用 CSS 和纯 JavaScript 实现返回顶部按钮。

最简单的实现返回顶部按钮的方法是,在页面顶部放置一个 HTML 元素,并在页面末尾附近添加一个调用该元素的链接:



<div id="scroll-to-top"></div>
<!-- ... -->
<a href="#scroll-to-top"></a>


Enter fullscreen mode Exit fullscreen mode

这段 CSS 代码用于实现平滑滚动:



html {
  scroll-behavior: "smooth";
}


Enter fullscreen mode Exit fullscreen mode

这是让页面滚动到顶部的最简单方法(正如Louis Low在评论中指出的那样,我最初的帖子中确实漏掉了这一点。)

结果如下:

无需JavaScript!

使用原生 JavaScript 的“滚动到顶部”按钮

前面的例子虽然可以正常运行,但有一个严重的缺陷:点击该链接后,URL 中会出现锚点#scroll-to-top 。我们可以将锚点改为#home,但即使用户点击返回按钮,它仍然会保留在 URL 历史记录中。

这就是为什么我更喜欢用 JavaScript 来实现的原因😁。而且 JavaScript 还允许更多自定义选项,例如:

  • 当用户向下滚动页面 x% 后显示按钮。
  • 动画化入口和出口。

按钮

我们创建一个简单的按钮,并给它添加一个类名,scrollToTopBtn这样我们就可以在js中引用它了。



<button class="scrollToTopBtn">TOP</button>


Enter fullscreen mode Exit fullscreen mode

以下是按钮的一些 CSS 属性:

  • position: fixed;将其从页面布局中移除。

  • bottom: 50px;并将right: 50px;其放置在右下角。

  • z-index: 100;较大的 z-index 值能使按钮始终位于所有其他元素之上。

  • display: none;首先用来隐藏它。

检测用户滚动

我们可以通过事件监听器检测用户的滚动操作scroll



document.addEventListener("scroll", handleScroll);

function handleScroll() {
  // do something on scroll
}


Enter fullscreen mode Exit fullscreen mode

显示“滚动到顶部”按钮逻辑

在这个handleScroll函数中,我们将检查是否需要显示或隐藏按钮。我们将使用三个元素属性:

  • clientHeight表示元素在其父元素中可见的部分。

  • scrollHeight表示元素的总高度,包括溢出部分的高度。

clientHeight 和 scrollHeight

溢出部分的高度是指可以滚动的总像素数。换句话说:可滚动高度 = 滚动高度 - 客户端高度



var scrollableHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight;


Enter fullscreen mode Exit fullscreen mode

document.documentElement是文档元素。我们使用它而不是,是document因为 scrollHeight 和 clientHeight 是元素的属性。

  • scrollTop表示从顶部滚动的像素数,也就是用户实际滚动的像素数。

将 scrollTop 除以 scrollableHeight,我们得到一个介于 0 和 1 之间的比值。0 表示用户没有滚动页面,1 表示用户已滚动到页面底部。这个比值告诉我们用户滚动了多少。

如果我们希望用户滚动 50% 后才显示返回顶部按钮,我们将黄金比例设置为 0.5。然后,通过 if else 语句,使按钮在上方可见,在下方隐藏。



document.addEventListener("scroll", handleScroll);
// get a reference to the button
var scrollToTopBtn = document.querySelector(".scrollToTopBtn");

function handleScroll() {
  var scrollableHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight;
  var GOLDEN_RATIO = 0.5;

  if ((document.documentElement.scrollTop / scrollableHeight ) > GOLDEN_RATIO) {
    //show button
    scrollToTopBtn.style.display = "block";
  } else {
    //hide button
    scrollToTopBtn.style.display = "none";
  }
}


Enter fullscreen mode Exit fullscreen mode

这样一来,滚动到顶部按钮就会出现,滚动时则会隐藏。

返回顶部

有很多使用 jQuery 的滚动示例。但如今,使用纯 JavaScript 的 scrollTo 方法可以轻松实现滚动效果:



\\...
scrollToTopBtn.addEventListener("click", scrollToTop);

function scrollToTop() {
  window.scrollTo({
    top: 0,
    behavior: "smooth"
  });
}


Enter fullscreen mode Exit fullscreen mode
  • top: 0,表示垂直滚动到 0px。
  • behavior: "smooth"使滚动流畅。
  • 此外,还有一个left用于水平滚动的属性。

就这样!以下是最终的js代码:



document.addEventListener("scroll", handleScroll);
// get a reference to our predefined button
var scrollToTopBtn = document.querySelector(".scrollToTopBtn");

function handleScroll() {
var scrollableHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight;
var GOLDEN_RATIO = 0.5;

if ((document.documentElement.scrollTop / scrollableHeight ) > GOLDEN_RATIO) {
//show button
scrollToTopBtn.style.display = "block";
} else {
//hide button
scrollToTopBtn.style.display = "none";
}
}

scrollToTopBtn.addEventListener("click", scrollToTop);

function scrollToTop() {
window.scrollTo({
top: 0,
behavior: "smooth"
});
}

Enter fullscreen mode Exit fullscreen mode




锵锵🎉🎉🎉!

感谢阅读🥰🥰!!希望这篇文章对你有帮助。

改进之处:

我尽量保持简洁。通常我会切换类而不是显示,以显示过渡动画。

以下是如何让按钮逐渐亮起的方法:

文章来源:https://dev.to/ljcdev/scroll-to-top-button-in-vanilla-js-beginners-2nc