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

news2024/12/24 2:40:54

使用 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+1
      return 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.coloradmin.cn/o/1592260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cocos creator 实现spine局部换装

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

elasticsearch7安全配置--最低安全等级,用户名密码

上一篇博客在centos7上安装了elasticsearch7 接下来对elasticsearch进行安全方面的配置 minimal security 最低安全等级&#xff0c;用户名密码 首先开启xpack vim config/elasticsearch.yml xpack.security.enabled: true由于我是单机配置的&#xff0c;还加了如下配置 d…

小区烟火AI检测/楼道杂物堆积消防隐患AI智能识别方案

一、背景需求 据新闻报道&#xff0c;今年4月7日&#xff0c;安徽省合肥市肥东县一民房发生火灾&#xff0c;致1死11伤&#xff0c;起火点是“一楼楼道杂物间”。 因为小区居民楼楼道堆积大量杂物而导致的消防火灾事故也不在少数。楼道堆积杂物是一个长期存在的问题&#xff…

【MATLAB】GA_ELM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 GA_ELM&#xff08;Genetic Algorithm and Extreme Learning Machine&#xff09;是一种结合了遗传算法和极限学习机的神经网络时序预测算法。它的核心思想是通过使用遗传算法来优化极限学习机的权重和偏差&…

刷代码随想录有感(30):有效的括号

经典题目&#xff0c;但是我写的出了些问题&#xff0c;题干如下&#xff1a; 我的代码&#xff1a; class Solution { public:stack<char> st;bool isValid(string s) {if(s.size() % 2 ! 0) return false;//利用字符串长度是否为奇偶进行剪枝操作for(char i : s){//遍…

CSS特效---百分比加载特效

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

EasyImage2.0 简单图床开源

特点 支持API 支持仅登录后上传 支持设置图片质量 支持压缩图片大小 支持文字/图片水印 支持设置图片指定宽/高 支持上传图片转换为指定格式 支持限制最低宽度/高度上传 支持上传其他文件格式 在线管理图片 支持网站统计 支持设置广告 支持图片鉴黄 支持自定义代码 支持上传IP黑…

【计算机毕业设计】日用百货交易网站——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

Redis数据持久化 AOF RDB

Redis数据持久化 AOF RDB 1、单点 redis 的问题2、主从复制2.1 命令传播 3、Redis的持久化3.1 AOF写回策略重写机制后台重写 3.2 RDB&#xff08;默认方式&#xff09;RDB 方式&#xff1a;执行快照时&#xff0c;数据能被修改吗&#xff1f;RDB 方式总结 3.3 RDB 和 AOF 组合&…

2024年公共管理、健康与大数据国际学术会议(ICPAHBD 2024)

2024 International Conference on Public Administration, Health and Big Data (ICPAHBD 2024) ●会议简介 2024年公共管理、健康与大数据国际学术会议&#xff08;ICPAHBD 2024&#xff09;即将在宁波盛大召开。本次会议旨在汇聚全球公共管理、健康与大数据领域的专家学者…

【计算机毕业设计】疫情期间医院门诊管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

修复开始菜单消失或不能工作的几种方法,总有一种适合你

如果Windows开始菜单消失或按Windows键时无法打开,请修复Windows 11或Windows 10 PC上的一些系统组件,使菜单重新工作。下面是如何做到这一点。 作为基本修复,请重新启动Windows 11或Windows 10 PC,看看是否解决了问题。如果没有,请使用以下故障排除方法。 使任务栏可见…

字符和字符串操作函数总结

索引 一 . 字符操作函数1. 字符分类函数2. 字符转换函数 二 . 字符串操作函数长度不受限制的字符串操作函数1. strcpy函数的使用和模拟实现2. strcat函数的使用和模拟实现3. strcmp函数的使用和模拟实现 长度受限制的字符串操作函数1. strncpy函数的使用2. strncat函数的使用3.…

IP地址修改步骤详解

IP地址是网络设备在网络中的标识&#xff0c;它决定了设备在网络中的位置与可访问性。然而&#xff0c;在某些情况下&#xff0c;我们可能需要修改IP地址&#xff0c;以满足特定的网络需求或解决网络问题。虎观代理将详细介绍IP地址的修改步骤&#xff0c;帮助读者更好地理解和…

Springboot+Vue项目-基于Java+MySQL的社区团购系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

21 标准错误

标准输出重定向关闭无数据 下面的代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int main() {close(1);i…

意得辑真不错

意得辑真不错&#xff0c;85喆优惠码延长到25.12.31了我用editage意得辑润色SCI已经第4年了&#xff0c;今天他家的学术支持老师让我写几句感受&#xff0c;那我真的感受太多了。因为下单太多一度被导师怀疑是在他家套经费。22年刚读博同时润色了三篇&#xff0c;被导师叫到办公…

新手做抖店需要掌握的技巧!这些运营方法,保证让你快速出单!

哈喽~我是电商月月 新手做抖店做不好&#xff1f;除了没努力的原因&#xff0c;还有一点&#xff0c;就是缺少运营的方法&#xff01; 今天我就给大家普及几个运营过程中非常重要的技巧&#xff01; 这都是我在运营中总结出来的能提高出单率的干货&#xff0c;新手建议收藏 …

HBuilderX 中开发vue,引入百度地图获取当前ip地址定位

实现功能&#xff1a;使用百度地图获取IP地址&#xff0c;定位到当前位置 参考文档地址&#xff1a;MapVGL | 快速入门 一、在有外网的情况下&#xff0c;常规引入百度地图的方法如下&#xff1a; 1、在index.html中引入 <script src"//api.map.baidu.com/api?v1.…

将Visio绘图导出PDF文件,使其自适应大小,并去掉导入Latex的边框显示

问题描述 将Visio绘图导成pdf文件&#xff0c;首先在Visio绘图如下&#xff1a; 如果直接导出或者另存为pdf文件&#xff0c;则会发现pdf文件是整个页面大小&#xff0c;而不是图片大小。而且在导入latex等排版工具现实时&#xff0c;会显示边框。 问题解决 1.调整Visio中的页…