JS控制元素平滑滚动,页面自动滚动锚点实现

使用 scrollIntoView 实现元素内子元素的平滑滚动,
下面是模拟接口list返回,然后通过按钮切换下一个,页面就会滚动到响应的位置
具体 scrollIntoView 有一些其他参数来配置滚动的具体交换,网上去查即可
备注:下面的代码使用 Vite框架 + React Hooks + 简单的TS,实现的方案都是一样,具体的代码可能不同

实现效果如下:
请添加图片描述

首先第一步,配置电脑设置
如图所示:打开【控制面板】- 搜索【性能】 - 调整 Windows 的外观和性能选项 - 开启【窗口内的动画控件和元素】
在这里插入图片描述

第二步,写页面和样式代码
这里使用了react + ts,不管用什么语言框架,理解其中思路,代码实现可能不同

// tsx 文件
import { useEffect, useRef, useState } from 'react'
import './index.css'export default function Index() {const listRef = useRef<any>() // 需要滚动的父容器const [acitve, setActive ] = useState(0) //当前激活项const [list, setList] = useState<any>([])// 生命周期获取接口useEffect(() => {getData()}, [])// 监听active激活位置的变化,滚动到相应为止useEffect(() => {let childEl = listRef.current.childNodes[acitve]// 由于接口是异步的,一开始进入页面会执行要处理初始情况,list有值了才开始if(list.length){childEl.scrollIntoView({ behavior: 'smooth' });}}, [acitve])// 这里模仿接口来的数据const getData = async () => {let res = await new Promise(resolve => {setTimeout(() => {return resolve([0,1,2,3,4,5,6,7,8,9])}, 500)})setList(res)}// 设置当前激活项目const onChange = () => {setActive(pre => {let next = pre >= 9 ? 0: pre+1return next})}return (<div className='page'><div className='head'><span>acitve: {acitve}</span><button onClick={onChange}>next</button></div><div className='list_warp'><div className='list' ref={listRef}>{ list.map((item:number) => <div key={item} className='card'>{item}</div>)}</div></div></div>)
}

对应的 index.css

/* 同目录下的index.css */
.page{margin: 24px;width: 300px;
}.list_warp{margin: 24px 0;width: 300px;height: 60vh;padding: 12px;border: 2px solid red;background:  pink;box-sizing: border-box;
}.list{height: 100%;overflow-y: scroll;scrollbar-width: none;-ms-overflow-style: none;&::-webkit-scrollbar{display: none;}
}.head{display: flex;justify-content: space-between;
}.card{overflow: hidden;background: greenyellow;margin-bottom: 12px;height: 200px;border: 1px solid green;box-sizing: border-box;
}

到这里就是实现了效果了
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时智能应答3D数字人搭建2

先看效果&#xff1a; 3d数字人讲黑洞 根据艾媒咨询数据&#xff0c;2021年&#xff0c;中国虚拟人核心产业规模达到62.2亿元&#xff0c;带动市场规模达到1074.9亿元&#xff1b;2025年&#xff0c;这一数据预计将达到480.6亿元与6402.7亿元&#xff0c;同比增长迅猛。数字人可…

什么是线程的上下文切换?

我们知道使用多线程的目的是为了充分利用多核CPU&#xff0c;比如说我们是16核&#xff0c;但是当创建很多线程比如说160个&#xff0c;CPU不够用了&#xff0c;此时就是一个CPU来应付多个线程&#xff08;这里我们是一个CPU应对10个线程&#xff09;。这个时候&#xff0c;操作…

无人机巡检技术革命性变革光伏电站运维管理

在中国广袤的大地上&#xff0c;光伏电站如雨后春笋般崛起&#xff0c;晶体硅组件板在阳光下熠熠生辉&#xff0c;为人们带来了源源不断的绿色能源。然而&#xff0c;随着光伏产业的迅猛发展&#xff0c;电站运维管理面临着前所未有的挑战。而无人机巡检技术的引入&#xff0c;…

Oracle获取对象的DDL创建语句

1.命令行方式&#xff08;如&#xff1a;sqlplus&#xff09; ## 用户 select dbms_metadata.get_ddl(USER,TEST) from dual;## 表 select dbms_metadata.get_ddl(TABLE,TEST,T1) from dual;## 表空间 select dbms_metadata.get_ddl(TABLESPACE,TBS_NAME) from dual;## 索引 s…

cocos creator 实现spine局部换装

1 使用3.7.4版本 2 js代码 3 c Native层修改源码

vscode ssh远程服务器并通过代码程序以及terminal启动GUI

写在前面 之前在做带有GUI界面的程序一般都在MobaXterm类似得应用程序中实现&#xff0c;因为自带X Server,但是现在在代码中遇到Bug&#xff0c;需要在vscode中断点调试&#xff0c;但vscode不自带X server,导致没有到问题出就被卡在GUI这一步&#xff0c;这就带来了问题&…

JVM性能调优——GC日志分析

文章目录 1、概述2、生成GC日志3、Parallel垃圾收集器日志解析3.1、Minor GC3.2、FULL GC 4、G1垃圾收集器日志解析4.1、Minor GC4.2、并发收集4.3、混合收集4.4、Full GC 5、CMS垃圾收集器日志解析5.1、Minor GC5.2、Major GC5.3、浮动垃圾 6、日志解析工具6.1、GCeasy6.2、GC…

【300套】基于Springboot+Vue的Java实战开发项目(附源码+演示视频+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享300的Java毕业设计&#xff0c;基于Springbootvue框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业…

基于多种语言,使用Selenium实现自动化的常用单元测试框架!

简介 Selenium是自动化网络应用程序的首选工具。Selenium支持基于Java、C#、PHP、Ruby、Perl、JavaScript和Python等多种编程语言的各种单元测试框架。这些框架用于在 Windows、MacOS 和 Linux 等不同平台的网络应用程序上执行测试脚本。任何成功的自动化流程都有赖于强大的测…

恶意样本溯源法

恶意样本溯源追踪主要去了解攻击者或者团队的意图&#xff1b;&#xff08;有因才有果&#xff0c;这里主要是通过分析结果&#xff0c;去了解攻击者的意图&#xff0c;比如&#xff1a;政治&#xff0c;私怨&#xff0c;业务&#xff0c;经济等&#xff09;。 了解攻击链 恶…

SF58-ASEMI适配器二极管SF58

编辑&#xff1a;ll SF58-ASEMI适配器二极管SF58 型号&#xff1a;SF58 品牌&#xff1a;ASEMI 封装&#xff1a;DO-27 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;5A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;600V 最大正向电压&…

逆向案例二十三——某租逆向,总是有映射源文件怎么办以及分析webpack代码

网址&#xff1a;aHR0cHM6Ly93d3cubWFvbWFvenUuY29tLyMvYnVpbGQ 抓取数据包发现载荷以及数据都进行了加密&#xff1a; 定位方法一&#xff1a;直接搜decrypt(,进入js文件&#xff0c;可以发现就是直接AES的解密方法&#xff0c;打上断点&#xff0c; 下方的d是解密函数 现在有…