JavaScript实现减速回到顶部的滑动效果代码
作者:白露时间:2026-10-26 08:07:42浏览:558
本文介绍如何使用JavaScript实现带有减速效果的回到顶部功能。通过获取滚动条位置并动态计算移动距离,利用setTimeout进行迭代调用,模拟物理减速特性,提升用户体验。
减速回到顶部功能原理
随着JavaScript应用的普及,页面滑动效果已成为常见交互方式。为了更贴合物理运动特征,本文将置顶功能优化为带有减速效果的滑动动画。
核心原理在于实时获取滚动条距离页面顶部的偏移量,每次向上移动一段距离;随后再次获取当前偏移量,并计算出一个比上一次更小的移动步长,如此循环迭代直至到达顶部。
具体JavaScript实现如下:
JavaScript核心代码实现
代码逻辑如下:
/**
注释说明:回到页面顶部
参数说明:加速度值
参数说明:时间间隔(毫秒)
**/
function goTop(acceleration, time) {
acceleration = acceleration || 0.1;
time = time || 16;
var x1 = 0;
var y1 = 0;
var x2 = 0;
var y2 = 0;
var x3 = 0;
var y3 = 0;
if (document.documentElement) {
x1 = document.documentElement.scrollLeft || 0;
y1 = document.documentElement.scrollTop || 0;
}
if (document.body) {
x2 = document.body.scrollLeft || 0;
y2 = document.body.scrollTop || 0;
}
var x3 = window.scrollX || 0;
var y3 = window.scrollY || 0;
// 计算滚动条到页面顶部的水平距离
var x = Math.max(x1, Math.max(x2, x3));
// 计算滚动条到页面顶部的垂直距离
var y = Math.max(y1, Math.max(y2, y3));
// 滚动距离 = 当前距离 / 速度。由于速度大于1且距离逐渐减小,滚动步长会越来越小
var speed = 1 + acceleration;
window.scrollTo(Math.floor(x / speed), Math.floor(y / speed));
// 若距离未归零,则继续递归调用本函数
if(x > 0 || y > 0) {
var invokeFunction = "goTop(" + acceleration + ", " + time + ")";
window.setTimeout(invokeFunction, time);
}
} 注意:document.documentElement.scrollTop、document.body.scrollTop与window.scrollY在功能上等价,但不同浏览器的支持情况可能存在差异,建议在实际使用时进行兼容性调试。
HTML调用示例:
HTML调用示例
HTML代码片段如下:
<a href="#" onclick="goTop();return false;">TOP</a>作者最新文章
AOS.js 动画不触发怎么办?排查 DOM 加载与移动端兼容问题
2026-11-05 17:02:26
sigma.js 怎么实现节点点击、拖拽与悬停提示交互
2026-11-05 15:03:27
Matter.js 与 PixiJS/Three.js 集成:分离物理计算与渲染
2026-11-05 13:43:48
主流JS弹幕库选型指南:Danmaku.js等库的功能与体积对比
2026-11-05 09:28:19
JavaScript点击事件监听与交互效果实例
2026-11-05 09:10:19
