当前位置: 首页 > news >正文

js:scroll平滑滚动页面或元素到顶部或底部的方案汇总

目录

    • 1、CSS的scroll-behavior
    • 2、Element.scrollTop
    • 3、Element.scroll()/Window.scroll()
    • 4、Element.scrollBy()/Window.scrollBy()
    • 5、Element.scrollTo()/Window.scrollTo()
    • 6、Element.scrollIntoView()
    • 7、自定义兼容性方案
    • 8、参考文章

准备知识:

  • scrollWidth: 是元素全部内容的宽度,包括由于overflow溢出而在屏幕上不可见的内容
  • scrollHeight: 是元素全部内容的高度,包括由于overflow溢出而在屏幕上不可见的内容
  • scrollTop: 纵向滚动条距离元素最顶部的距离
  • scrollLeft: 横向滚动条距离元素最左侧的距离

1、CSS的scroll-behavior

语法

scroll-behavior: auto | smooth | inherit | unset

参数
- smooth:表示滚动很平滑,有过渡效果
- auto:没有过渡效果,一闪而过。

关键代码

html, body {scroll-behavior: smooth;
}

示例代码

<style>* {margin: 0;padding: 0;text-align: center;}html {scroll-behavior: smooth;}.btn {margin-bottom: 20px;}.box {margin-top: 20px;height: 1500px;line-height: 1500px;background-color: #95e1d3;}
</style><div class="box" id="box">Box</div><a href="#box" class="btn">回到顶部</a>

在线演示:https://mouday.github.io/front-end-demo/scroll/scroll-behavior.html

可以通过js判断是否支持css scroll-behavior属性

function isSuportScrollBehavior() {return !(typeof window.getComputedStyle(document.body).scrollBehavior === 'undefined');
}

2、Element.scrollTop

设置属性scrollTop为元素的scrollHeight 即可滚动到元素底部,不过没有动画效果

示例

<style>* {margin: 0;padding: 0;text-align: center;}.btn {margin-top: 20px;}.box {margin-top: 20px;height: 1500px;line-height: 1500px;background-color: #95e1d3;}
</style><button id="btn" class="btn">滚动到底部</button><div class="box">Box</div><script>// 滑动底部let btn = document.querySelector("#btn");btn.addEventListener("click", function () {document.documentElement.scrollTop = document.documentElement.scrollHeight;});
</script>

兼容性写法

let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

在线演示:https://mouday.github.io/front-end-demo/scroll/scrollTop.html

3、Element.scroll()/Window.scroll()

scroll() 方法是用于滚动元素 到某个特定坐标

文档: https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scroll

语法

scroll(x-coord, y-coord)
scroll(options)

参数

  • x-coord 你想要显示在左上角的元素沿水平轴的像素。

  • y-coord 你想要显示在左上角的元素沿垂直轴的像素。

  • options

    • top: 指定沿 Y 轴滚动窗口或元素的像素数。
    • left: 指定沿 X 轴滚动窗口或元素的像素数。
    • behavior:
      • smooth 表示平滑滚动并产生过渡效果,
      • auto 或缺省值会直接跳转到目标位置,没有过渡效果。

示例

<style>* {margin: 0;padding: 0;text-align: center;}.btn {margin-top: 20px;}.box {margin-top: 20px;height: 1500px;line-height: 1500px;background-color: #95e1d3;}
</style><button id="to-bottom" class="btn">滚动到底部</button><div class="box">Box</div><button id="tp-top" class="btn">滚动到顶部</button><script>// 滑动底部let toBottom = document.querySelector("#to-bottom");toBottom.addEventListener("click", function () {window.scrollTo({top: document.documentElement.scrollHeight,behavior: "smooth",});});// 滑动顶部let toTop = document.querySelector("#tp-top");toTop.addEventListener("click", function () {window.scrollTo({top: 0,behavior: "smooth",});});
</script>

在线演示:https://mouday.github.io/front-end-demo/scroll/scroll.html

4、Element.scrollBy()/Window.scrollBy()

scrollBy() 方法是使得元素滚动一段特定距离的 Element 接口。

使用方法同Element.scroll()/Window.scroll()

注意:scrollBy (回滚滚动条需要写负数,其它与scroll一致)

<style>* {margin: 0;padding: 0;text-align: center;}.btn {margin-top: 20px;}.box {margin-top: 20px;height: 1500px;line-height: 1500px;background-color: #95e1d3;}
</style><button id="to-bottom" class="btn">滚动到底部</button><div class="box">Box</div><button id="tp-top" class="btn">滚动到顶部</button><script>// 滑动底部let toBottom = document.querySelector("#to-bottom");toBottom.addEventListener("click", function () {window.scrollBy({top: document.documentElement.scrollHeight,behavior: "smooth",});});// 滑动顶部let toTop = document.querySelector("#tp-top");toTop.addEventListener("click", function () {window.scrollBy({top: -document.documentElement.scrollHeight,behavior: "smooth",});});
</script>

在线演示:https://mouday.github.io/front-end-demo/scroll/scrollBy.html

5、Element.scrollTo()/Window.scrollTo()

Element 的 scrollTo() 方法可以使界面滚动到给定元素的指定坐标位置。

使用方法同Element.scroll()/Window.scroll()

6、Element.scrollIntoView()

Element 接口的 scrollIntoView() 方法会滚动元素的父容器,使被调用 scrollIntoView() 的元素对用户可见。

文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView

语法

scrollIntoView()
scrollIntoView(alignToTop)
scrollIntoView(scrollIntoViewOptions)

参数

  • alignToTop可选(布尔值)

    • true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的 scrollIntoViewOptions: {block: “start”, inline: “nearest”}。这是这个参数的默认值。
    • false,元素的底端将和其所在滚动区的可视区域的底端对齐。相应的 scrollIntoViewOptions: {block: “end”, inline: “nearest”}。
  • scrollIntoViewOptions 可选 实验性

    • behavior 可选 定义动画过渡效果,auto 或 smooth 之一。默认为 auto。
    • block 可选 定义垂直方向的对齐,start(上)、center(中)、end(下) 或 nearest(距离最近的点) 之一。默认为 start。
    • inline 可选 定义水平方向的对齐,start、center、end 或 nearest 之一。默认为 nearest。
<style>* {margin: 0;padding: 0;text-align: center;}.btn {margin-top: 20px;}pre,code {text-align: unset;}.top {margin-top: 20px;height: 1500px;line-height: 1500px;background-color: #95e1d3;}.box {margin-top: 20px;height: 200px;line-height: 200px;background-color: #eaffd0;}
</style><button id="btn" class="btn">滚动到Box</button><div class="top">TOP</div><div class="box">Box</div><script>let btn = document.querySelector("#btn");btn.addEventListener("click", function () {let top = document.querySelector(".box");top.scrollIntoView({block: 'start',behavior: "smooth",});});
</script>

在线演示:https://mouday.github.io/front-end-demo/scroll/scrollIntoView.html

7、自定义兼容性方案

可能在部分老旧设备上存在兼容性,从网上收集了一个多设备支持的缓冲方案

<style>* {margin: 0;padding: 0;text-align: center;}.btn {margin-top: 20px;}.box {margin-top: 20px;height: 1500px;line-height: 1500px;background-color: #95e1d3;}
</style><button id="to-bottom" class="btn">滚动到底部</button><div class="box">Box</div><button id="tp-top" class="btn">滚动到顶部</button><script>// 封装一个回到底部或者顶部的函数function scrollToTop(position) {// 使用requestAnimationFrame,如果没有则使用setTimeOutif (!window.requestAnimationFrame) {window.requestAnimationFrame = function (callback) {return setTimeout(callback, 20);};}// 获取当前元素滚动的距离let scrollTopDistance =document.documentElement.scrollTop || document.body.scrollTop;function smoothScroll() {console.log('smoothScroll');// 如果你要滚到顶部,那么position传过来的就是0,下面这个distance肯定就是负值。let distance = position - scrollTopDistance;// 每次滚动的距离要不一样,制造一个缓冲效果scrollTopDistance = scrollTopDistance + distance / 5;// 判断条件if (Math.abs(distance) < 1) {window.scrollTo(0, position);} else {window.scrollTo(0, scrollTopDistance);requestAnimationFrame(smoothScroll);}}smoothScroll();}// 滑动顶部let toTop = document.querySelector("#tp-top");toTop.addEventListener("click", function () {// 回到顶部scrollToTop(0);});// 滑动底部let toBottom = document.querySelector("#to-bottom");toBottom.addEventListener("click", function () {// 滚到底部scrollToTop(document.documentElement.scrollHeight - window.innerHeight);});
</script>

在线演示:https://mouday.github.io/front-end-demo/scroll/smoothScroll.html

8、参考文章

  1. JS滑动到页面顶部(或底部)
  2. 2020-06-23原生js使dom自动滚动到最底部
  3. s 中关于操纵 Element 进行滚动的方法,都在这了‍‍‍
  4. 平滑滚动到顶部或底部的几种方案
  5. 完美实现一个“回到顶部”
  6. [前端]通过图片懒加载引出来的知识点

相关文章:

js:scroll平滑滚动页面或元素到顶部或底部的方案汇总

目录 1、CSS的scroll-behavior2、Element.scrollTop3、Element.scroll()/Window.scroll()4、Element.scrollBy()/Window.scrollBy()5、Element.scrollTo()/Window.scrollTo()6、Element.scrollIntoView()7、自定义兼容性方案8、参考文章 准备知识&#xff1a; scrollWidth: 是…...

【Docker】Docker的部署含服务和应用、多租环境、Linux内核的详细介绍

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…...

C国演义 [第五章]

第五章 子集题目理解步骤树形结构递归函数递归结束的条件单层逻辑 代码 子集II题目理解步骤树形结构递归函数递归结束的条件单层逻辑 代码 子集 力扣链接 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。…...

Proxy-Reflect使用详解

1 监听对象的操作 2 Proxy类基本使用 3 Proxy常见捕获器 4 Reflect介绍和作用 5 Reflect的基本使用 6 Reflect的receiver Proxy-监听对象属性的操作(ES5) 通过es5的defineProperty来给对象中的某个参数添加修改和获取时的响应式。 单独设置defineProperty是只能一次设置一…...

【Linux后端服务器开发】Shell外壳——命令行解释器

目录 一、Shell外壳概述 二、描述Shell外壳原理的生动例子 三、C语言模拟实现Shell外壳 一、Shell外壳概述 在狭义上 , 我们称Linux操作系统的内核为 Linux 在广义上 , Linux发行版 Linux内核 外壳程序 就比如市面上现在的redhat, centos, ubuntu等等我们耳熟能详的Linux发…...

【无公网IP】在外Windows远程连接MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自cpolar极点云文章&#xff1a;公网远程…...

mac python3 安装virtualenv

第一步&#xff0c;执行安装virtualenv pip3 install virtualenv 注意&#xff1a;如果出现WARNING: The script virtualenv is installed in ‘/home/local/bin’ which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning,…...

网络安全(自学笔记)

如果你真的想通过自学的方式入门web安全的话&#xff0c;那建议你看看下面这个学习路线图&#xff0c;具体到每个知识点学多久&#xff0c;怎么学&#xff0c;自学时间共计半年左右&#xff0c;亲测有效&#xff08;文末有惊喜&#xff09;&#xff1a; 1、Web安全相关概念&am…...

SPSS方差分析

参考文章 导入准备好的数据 选择分析方法 选择参数 选择对比&#xff0c;把组别放入因子框中&#xff0c;把红细胞增加数放进因变量列表 勾选“多项式”&#xff0c;等级取默认“线性” &#xff0c;继续 接着点击“事后比较”&#xff0c;弹出对话框&#xff0c;勾选“LSD” …...

【Linux】深入理解文件系统

系列文章 收录于【Linux】文件系统 专栏 关于文件描述符与文件重定向的相关内容可以移步 文件描述符与重定向操作。 可以到 浅谈文件原理与操作 了解文件操作的系统接口。 想深入理解文件缓冲区还可以看看文件缓冲区。 目录 系列文章 磁盘 结构介绍 定位数据 抽象管理…...

12.9 专用指令

目录 状态寄存器传送指令 读CPSR 写CPSR 软中断指令 协处理器指令 协处理器数据运算指令 协处理器存储器访问指令 协处理器寄存器传送指令 伪指令 空指令 LDR 指令 伪指令 状态寄存器传送指令 专门用来读写CPSR寄存器的指令 读CPSR MRS R1,CPSR R1 CPSR 写CP…...

Jvm对象回收算法-JVM(九)

上篇文章介绍了jvm运行时候对象进入老年代的场景&#xff0c;以及如何避免频繁fullGC。 Jvm参数设置-JVM&#xff08;八&#xff09; 老年代分配担保机制 这个机制的目的是为了提升效率&#xff0c;在minorGC之前&#xff0c;会有三次判断&#xff0c;之后再次minorGC速度会…...

SpringCloud Alibaba微服务分布式架构组件演变

文章目录 1、SpringCloud版本对应1.1 技术选型依据1.2 cloud组件演变&#xff1a; 2、Eureka2.1 Eureka Server &#xff1a; 提供服务注册服务2.2 EurekaClient &#xff1a; 通过注册中心进行访问2.3 Eureka自我保护 3、Eureka、Zookeeper、Consul三个注册中心的异同点3.1 CP…...

【Linux】初步理解操作系统和进程概念

一.认识操作系统 操作系统是一款纯正的 “搞管理” 的文件。 那操作系统为什么要管理文件&#xff1f; “管理” 又是什么&#xff1f; 它是怎么管理的&#xff1f; 为什么&#xff1f; 1.操作系统帮助用户&#xff0c;管理好底层的软硬件资源&#xff1b; 2.为了给用户提供一个…...

TypeScript 中的字面量类型和联合类型特性

字面量类型和联合类型是 TypeScript 中常用的类型特性。 1. 字面量类型&#xff1a; 字面量类型是指具体的值作为类型。例如&#xff0c;字符串字面量类型可以通过给定的字符串字面量来限制变量的取值范围。 let status: "success" | "error"; // status…...

react+jest+enzyme配置及编写前端单元测试UT

文章目录 安装及配置enzyme渲染测试技巧一、常见测试二、触发ant design组件三、使用redux组件四、使用路由的组件五、mock接口网络请求六、mock不需要的子组件 安装及配置 安装相关库&#xff1a; 首先&#xff0c;使用npm或yarn安装所需的库。 npm install --save-dev jest…...

自学网络安全(黑客)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…...

【unity小技巧】委托(Delegate)的基础使用和介绍

文章目录 一、前言1. 什么是委托&#xff1f;2. 使用委托的优点 二、举例说明1. 例12. 例2 三、案例四、泛型委托Action和Func1. Action委托2. Func委托 五、参考六、完结 一、前言 1. 什么是委托&#xff1f; 在Unity中&#xff0c;委托&#xff08;Delegate&#xff09;是一…...

【MySQL必知必会】第24章 使用游标(学习笔记)

游标 游标(cursor)是一个存储在MySQL服务器上的数据库查询&#xff0c;它不是一条select语句&#xff0c;而是被该语句检索出来的结果集游标主要用于交互式应用&#xff0c;其中用户需要滚动屏幕上的数据&#xff0c;并对数据进行浏览或做出更改只能用于存储过程&#xff0c;不…...

rosbag回放指定话题外的其他话题的方法

假设要回放file.bag包中除/tf话题外的所有话题 方法一 将原本/tf话题转发到另一个“黑洞话题”去&#xff0c;这样/tf话题就没输出了 rosbag play file.bag /tf:/tf_dev_null方法二 使用filter选项&#xff0c;重新生产一个新的不含/tf话题的包 rosbag filter file.bag fi…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...