以下是一个简单的弹性返回顶部的 JavaScript 代码示例:
// 获取返回顶部按钮元素
var backToTopBtn = document.getElementById("backToTop");
// 监听页面滚动事件
window.addEventListener("scroll", function() {
// 如果页面滚动距离大于一定值,显示返回顶部按钮,否则隐藏
if (window.pageYOffset > 100) {
backToTopBtn.style.display = "block";
} else {
backToTopBtn.style.display = "none";
}
});
// 给返回顶部按钮添加点击事件
backToTopBtn.addEventListener("click", function() {
// 使用 requestAnimationFrame 实现平滑滚动效果
var currentPosition = window.pageYOffset;
var startTime = null;
function scrollAnimation(currentTime) {
if (startTime === null) startTime = currentTime;
var timeElapsed = currentTime - startTime;
var run = easeInOutQuad(timeElapsed, currentPosition, -currentPosition, 500);
window.scrollTo(0, run);
if (timeElapsed < 500) requestAnimationFrame(scrollAnimation);
}
// 缓动函数
function easeInOutQuad(t, b, c, d) {
t /= d / 2;
if (t < 1) return (c / 2) * t * t + b;
t--;
return (-c / 2) * (t * (t - 2) - 1) + b;
}
requestAnimationFrame(scrollAnimation);
});基础概念:
window.pageYOffset :获取页面垂直滚动的距离。requestAnimationFrame :用于在浏览器重绘之前执行动画,使动画更流畅。优势:
类型: 常见的返回顶部效果包括平滑滚动和无动画直接跳转。
应用场景:
可能遇到的问题及原因:
requestAnimationFrame 使用不当。解决方法:
requestAnimationFrame ,避免频繁触发。