在 JavaScript 中滚动到页面顶部

Ankit Raj Goyal 2023年1月30日 2022年5月31日
  1. 在 JavaScript 中使用 Vanilla JS window.scrollTo() 方法滚动到页面顶部
  2. 使用动画 Vanilla JS 滚动到页面顶部 - window.scrollTo() 方法的新形式
  3. 使用 jQuery scrollTop() 方法滚动到页面顶部
  4. 通过使用 jQuery animate() 方法动画滚动到页面顶部
在 JavaScript 中滚动到页面顶部

为长网页提供 UI 元素以让用户滚动到页面顶部 JavaScript 至关重要。在本教程中,你将找到几种滚动到顶部的 JavaScript 方法。

我们将使用原生 JavaScript scrollTo 方法。我们还将展示如何使用 jQuery scrollTop() 方法和 scrollTop 属性滚动到顶部(请阅读以了解使用 jQuery 的好处)。

我们还将提供额外的技巧:一个巧妙的单行纯 HTML 快捷方式和一个自定义 vanilla JS 动画来滚动到页面顶部。

在 JavaScript 中使用 Vanilla JS window.scrollTo() 方法滚动到页面顶部

你可以使用 vanilla JS window.scrollTo() 方法滚动到 JavaScript 中的页面顶部。使用 window.scrollTo() 方法,我们可以滚动到文档中任何指定的 x 和 y 坐标集。

此方法的旧形式如下所示:

window.scrollTo(x-coordinate,y-coordinate);

我们可以通过传入 (0,0) 作为坐标参数来使用它滚动到 JavaScript 中的页面顶部。

let scrollTopBtn = document.getElementById("top");
scrollTopBtn.addEventListener("click",function(){
    window.scrollTo(0,0);
});

(请参阅随附的 HTML 和 CSS 文件以轻松跟随代码。)

你可以在下面看到此代码的演示:

滚动到 fnc

使用动画 Vanilla JS 滚动到页面顶部 - window.scrollTo() 方法的新形式

上述解决方案完成了工作,但它并不能带来良好的用户体验。

window.scrollTo() 方法还有一种新形式,可以让我们为滚动运动设置动画。你可以使用这个漂亮的小动画效果来改进 UX 和用户参与度指标。

新表单的工作方式如下:

window.scrollTo(options)

// options is a JSON objectwith
// top: the y-coordinate to scroll to
//left : the x-coordinate to scroll to
// behavior : an animated effect with vrious string values like 'smooth', 'slow' etc.

我们可以使用这种方法的这种形式使用 vanilla JavaScript 动画滚动到页面顶部。

let scrollTopBtn = document.getElementById('top');

scrollTopBtn.addEventListener('click',function(){
    window.scrollTo({top: 0, behavior:'smooth'});
});

(请参阅随附的 HTML 和 CSS 文件以获得更好的理解。)

代码很简单。我们将事件侦听器附加到按钮以触发滚动顶部功能。

回调以新形式实现了 window.scrollTo() 方法。我们通过 top:0 滚动到顶部,我们通过 behavior: 'smooth' 以获得一个很好的均匀动画效果。

你可以在此处查看工作演示:

滚动到动画

详细了解 vanilla JS window.scrollTo() 方法此处

使用 jQuery scrollTop() 方法滚动到页面顶部

你还可以使用 jQuery scrollTop() 方法滚动到页面顶部。

$("#top").on("click",function(){
    $(window).scrollTop(0);
});

逻辑很简单。我们附加了一个事件处理程序来监听滚动到顶部按钮时的 click 事件。

回调执行 $(window).scrollTop(0) 方法并滚动到页面顶部,因为我们将 0 作为其参数传递。

你可以在此处查看工作演示:

jQuery 滚动顶部 fnc

通过使用 jQuery animate() 方法动画滚动到页面顶部

像上面的 vanilla JS 解决方案一样,我们可以使用 jQuery 动画滚动到页面顶部以改善 UX。

$("#top").on("click",function(){
    $([document.documentElement,document.body]).animate({
        scrollTop:0
    },1000)
});

让我们深入探讨这里的逻辑。

事件监听器的回调首先选择了 document.documentElement(根元素)或 document.body。我们需要选择两者以确保跨浏览器兼容性。

(提示:这是我们使用 jQuery 的原因之一。稍后会详细介绍。)

然后,我们在选定对象上运行 animate() 方法并更改 scrollTop 属性以达到 0 值(页面顶部。)

最后,我们将动画持续时间作为第二个参数传递给回调。我们在这里通过了 1000 毫秒,但你可以选择任何你喜欢的时间跨度。

这是此方法的工作输出:

jQuery 滚动顶部动画

专业提示:我们使用 jQuery 来确保更好的跨浏览器兼容性。有时,UI 可能会在不同的浏览器中呈现奇怪的效果,并且很难排除故障。

由于 jQuery 是一个专业的前端库,它的优势在于可以解决跨浏览器不兼容的问题。因此,如果你的 vanilla JS 解决方案在某些浏览器中出现问题,你可以改用该方法的 jQuery 版本。

一行聪明的纯 HTML 滚动到页面顶部 Hack

你还可以使用单行 HTML hack 滚动到页面顶部(没有动画)。

<div>
    <a href="#">To Top</a>
</div>

这是输出的演示。

html

注意
这不是从顶部滚动到页面的推荐方法;这只是一个快速破解。你应该使用 vanilla JS/jQuery 方法。

使用旧的 scrollTop 属性滚动到页面顶部

一些浏览器对我们上面使用的 vanilla JS scrollTo() 方法存在问题。例如,许多用户报告说 MS Edge 并不总是能很好地使用这种方法,

因此,你可以使用带有 scrollTop 属性的旧方法。scrollTop 属性设置要垂直滚动元素的像素。

但是,此属性的一个特殊情况是,当你将其应用于根或 html 元素时,它会移动整个文档。

此处详细了解 scrollTop 属性。

我们可以使用此属性滚动到页面顶部。

let scrollTopBtn = document.getElementById("top");
scrollTopBtn.addEventListener("click",function(){
    document.getElementsByTagName('html')[0].scrollTop = 0;
});

代码很简单。回调选择了 html 元素并将其 scrollTop 属性设置为 0

你可以在下面看到工作演示:

scrollTop 道具

使用 JavaScript 动画脚本自定义滚动到页面顶部

最后,我们有一个不错的小脚本来设计自定义滚动到顶部的 JavaScript 动画。我们使用 setInteval()clearInterval() 函数来执行动画效果。

let scrollTopBtn = document.getElementById("top");
scrollTopBtn.addEventListener("click",function(){
    let customAnimScroll = window.setInterval(function(){
        let topOffset = window.pageYOffset;
        if (topOffset > 0) {
            window.scrollTo({top:topOffset - 20});
        }
        else{
            clearInterval(customAnimScroll);
        }
    }, 20);
});

让我们分解这里的逻辑。

我们在滚动到顶部按钮上的事件处理程序回调内的 window 对象上执行了 setInterval() 函数。setInterval 函数在特定持续时间后重复运行我们传递给它的回调。

它还返回了一个我们存储的 ID,用于启动/停止/修改 setInterval() 方法的特定实例。因此,我们运行 setInterval() 方法并将其 ID 存储在 customAnimScroll 变量中。

setInterval() 函数的回调将 window 对象的 pageYOffset 值存储在 topOffset 变量中。该值是 window 对象向下滚动的像素数。

最后,我们检查了 topOffset 值是否大于 0(意味着 window 向下滚动了一些像素)。如果是,我们使用上面看到的新形式的 scrollTo 方法将 window 向上移动 20 个像素。

在这里,我们选择每个周期向上移动 20 个像素,但你可以选择任何其他数字。

如果 topOffset 值不大于 0,我们已经滚动到 window 的顶部。在这种情况下,我们通过将之前存储在 customAnimScroll 变量中的 ID 传递给 clearInterval() 方法来结束 setInterval() 函数。

你可以在此处查看工作演示:

自定义动画

相关文章 - JavaScript Scroll