平滑滚动到页面顶部?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!

大家好,我是大澈!

本文约 700+ 字,整篇阅读约需 1 分钟。

今天分享一段优质 JS 代码片段,通过简单的逻辑实现了平滑滚动到顶部的效果,增强了用户体验。

老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

js 复制代码
const scrollToTop = () => {
  const c = document.documentElement.scrollTop || document.body.scrollTop
  
  if (c > 0) {
    window.requestAnimationFrame(scrollToTop)
    window.scrollTo(0, c - c / 8)
  }
}

分享原因

这段代码的目的是实现一个平滑滚动回到页面顶部的功能。

它通过逐步减少页面滚动位置的方式,创建了一个平滑的滚动动画效果,这在用户体验中比瞬间滚动更友好。

代码解析

1. const c = document.documentElement.scrollTop || document.body.scrollTop;

获取当前滚动位置。

document.documentElement.scrollTop:获取整个文档的滚动高度,适用于大多数现代浏览器。

document.body.scrollTop:兼容一些老旧浏览器,它们使用 document.body 作为滚动容器。

两者结合,确保在所有浏览器中都能获取到当前的滚动位置。

2. if (c > 0)

检查当前滚动位置是否大于0。

判断页面是否已经滚动到了顶部,如果已经在顶部(c <= 0),则不需要继续滚动。

3. window.requestAnimationFrame(scrollToTop);

请求下一帧动画。

使用 requestAnimationFrame 来递归调用 scrollToTop,这是一种浏览器优化的方法,用于实现平滑动画效果。

它告诉浏览器在下一次重绘之前调用指定的函数,从而创建流畅的动画。

4. window.scrollTo(0, c - c / 8);

平滑滚动到顶部。

window.scrollTo(x, y):将窗口滚动到指定的位置。

c - c / 8:每次将当前滚动位置减少当前滚动位置的八分之一,这样滚动速度会逐渐减慢,形成一个平滑的滚动效果。

  • end -
相关推荐
2301_32241428048 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
酷炫码神11 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
酷炫码神13 小时前
Day 8|Vue3 响应式:告别手动操作 DOM,让数据驱动界面
javascript·vue.js·ecmascript
码林鼠15 小时前
flutter状态管理入门教程-Riverpod
开发语言·javascript·flutter
互影派15 小时前
分享:Cocos 互动影游一套代码双端分发(Web H5 + Windows/Steam)实践
javascript
钱栈up15 小时前
前端改了三页、后端也动了,用户说「完全没变化」——我在 116 库上找到的三个真凶
css·数据库
Amos_Web15 小时前
Markdonw语法
开发语言·前端·javascript
星光不问赶路人15 小时前
Vue 3 对象监听与快照:ref 和 reactive 的关键差异
前端·vue.js
全栈项目管理程序猿15 小时前
ArcGIS JS 基础教程(34):体元系列 - 等值面 VoxelIsosurface
前端·javascript
SensorFlow16 小时前
离页埋点:sendBeacon 返回 true,为什么还不能算接收成功
javascript