滚动页面触发相应位置动画 ---react

需要实现的效果: (滚动到内容区域触发)

第一段内容移动效果
第二段内容淡入
第三段内容缩放

实现思路

 滚动过的距离+当前窗口的高度>元素到顶部窗口的距离  ===>则触发动画

整体代码

import React,{useRef,useEffect,useState} from 'react';// 此函数用于获取一个元素到最外层窗口的距离
// 接收两个参数
// obg---> Dom元素
// direction----->方向  top|bottom|left|right
const offset = (obj, direction) => {//将top,left首字母大写,并拼接成offsetTop,offsetLeftvar offsetDir = 'offset'+ direction[0].toUpperCase()+direction.substring(1);    var realNum = obj[offsetDir];var positionParent = obj.offsetParent;  //获取上一级定位元素对象while(positionParent != null){realNum += positionParent[offsetDir];positionParent = positionParent.offsetParent;}return realNum;
}const View = () => {let text_area1=useRef()let text_area2=useRef()let text_area3 = useRef()let [scrollH, setscrollH] = useState(0)let [domTop, setDomTop] = useState({Dom1_offT:0,Dom2_offT:0,Dom3_offT:0,})const init=()=>{let Dom1_offT = offset(text_area1.current, 'top')let Dom2_offT = offset(text_area2.current, 'top')let Dom3_offT = offset(text_area3.current, 'top')setDomTop({Dom1_offT,Dom2_offT,Dom3_offT})window.onscroll = () => {let currentH = document.documentElement.clientHeightlet scrollH = document.documentElement.scrollTopsetscrollH(scrollH+currentH)}}useEffect(() => {init()}, [])return (<div className="demo1_container"><div ref={text_area1} className={scrollH > domTop.Dom1_offT? 'text_area1 a_1' : 'text_area1'}><ul>{new Array(10).fill(0).map((item, index) => {return (<li key={index}>这是一段内容{index}</li>)})}</ul></div><div ref={text_area2}  className={scrollH>domTop.Dom2_offT?'text_area2 a_2':'text_area2' }><ul>{new Array(10).fill(0).map((item, index) => {return (<li key={index+10}>这是一段内容{index}</li>)})}</ul></div><div ref={text_area3}  className={scrollH>domTop.Dom3_offT?'text_area3 a_3':'text_area3' }><ul>{new Array(10).fill(0).map((item, index) => {return (<li key={index+20}>这是一段内容{index}</li>)})}</ul></div></div>       )
}export default View 

样式文件

.demo1_container {div {margin-top: 700px;}
}.a_1 {animation: A 1s 1;
}.a_2 {animation: B 1s 1;
}.a_3 {animation: C 1s 1;
}@keyframes A {0% {transform: translate(20%, 20%);}100% {transform: translate(0);}
}
@keyframes B {0% {opacity: 0;}100% {opacity: 1;}
}@keyframes C {0% {transform: scale(0.8);}100% {transform: scale(1);}
}

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

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

相关文章

系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术

简介&#xff1a;本篇以 first contact (通信两端建立首个连接) 场景为例&#xff0c;介绍 SMC-R 通信流程。 文/龙蜥社区高性能网络SIG 一、引言 通过上一篇文章 《系列解读SMC-R&#xff1a;透明无感提升云上 TCP 应用网络性能&#xff08;一&#xff09;》我们了解到&…

北京大学、阿里巴巴成立联合实验室,聚焦人工智能理论和创新算法研究

9月17日&#xff0c;在北京大学智能学科建设20周年大会上&#xff0c;北京大学和阿里巴巴共同宣布成立“北大-阿里妈妈人工智能创新联合实验室” &#xff08;以下简称实验室&#xff09;。实验室将聚焦人工智能前沿领域的理论、方法与关键技术展开研究&#xff0c;为社会和企业…

智能开放搜索上线定制分词器

简介&#xff1a;智能开放搜索上线定制召回模型-定制分词器功能&#xff0c;满足各行业、垂类、业务特殊&#xff0c;对搜索有较高分词要求的客户&#xff0c;提升语义理解能力&#xff0c;精准召回用户搜索意图。 NLP算法在搜索链路中的应用 这是一个完整的从查询词到搜索结…

滚动一屏距离

const top_page () > {if (document.documentElement.scrollTop 0) {return }let timmer;let h document.documentElement.clientHeightlet n 0timmer setInterval(() > {n;console.log(执行)if (n > h / 20) {clearInterval(timmer)}document.documentElement.s…

云端渲染时长1.58亿核小时,阿里云助力国漫巨制《新神榜:杨戬》提升视效

当前&#xff0c;追光动画新作《新神榜&#xff1a;杨戬》&#xff08;以下简称“杨戬”&#xff09;正在热映&#xff0c;制作水准再次升级。无论是“水墨特效太极图大战”&#xff0c;亦或神女婉罗的灵动舞姿&#xff0c;还是元神现身的超燃瞬间&#xff0c;都极具视觉震撼。…

如何开一场高效的迭代排期会 | 敏捷开发落地指南

简介&#xff1a;如何开一场高效的迭代排期会&#xff0c;高效落地敏捷开发&#xff0c;先从这3个关键活动着手&#xff0c;通过本文你将了解到什么是敏捷开发、什么是双周迭代、如何高效地开展排期会&#xff0c;以及如何在云效项目协作Projex 中落地排期会相关事宜。 摘要&a…

简单的聊天室

基于expresssocket.io express框架直接安装后得到模板 这是socket官网的例子&#xff1a; https://socket.io/get-started/chat /*** Module dependencies.*/ var app require(../app); var debug require(debug)(server:server); var http require(http); const { Serve…

Linux 中如何获取文件的绝对路径

我们都知道&#xff0c;在命令行可以使用 pwd 命令来获取当前目录的完整路径&#xff08;绝对路径&#xff09;&#xff1a;pwd那么&#xff0c;如何获取文件的绝对路径呢&#xff1f;有下列几种方法&#xff0c;可以打印文件的完整路径&#xff1a;readlinkrealpathfindls 和 …

EasyCV开源|开箱即用的视觉自监督+Transformer算法库

简介&#xff1a;EasyCV是阿里巴巴开源的基于Pytorch&#xff0c;以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具。EasyCV在阿里巴巴集团内支撑了搜索、淘系、优酷、飞猪等多个BU业务&#xff0c;同时也在阿里云上服务了若干企业客户&#xff0c;通过平台…

开源数据库为什么能捕获开发者的心?

【CSDN 编者按】开源数据库的重要性&#xff0c;早就不言而喻。早期的自由软件开发者和初创公司&#xff0c;很多都受益于开源数据库。伴随着曾经的初创公司羽翼逐渐丰满&#xff0c;它们的开发者文化渗透到整个生态系统中&#xff0c;更多的人开始关注这些初创公司采取的方法&…

react+umi+dva+ts基础基础使用

官网链接 umidva 文件目录 page 页面 index.tsx models 每一个model文件都是需要挂在dva实例上的才会生效demo.ts sevices 写接口的&#xff08;这里就不写了&#xff09;demo.ts实现一个简单的数据流向&#xff0c;将数据存储到dva&#xff0c;然后在页面使用 page/inde…

“消息驱动、事件驱动、流 ”基础概念解析

简介&#xff1a;本文旨在帮助大家对近期消息领域的高频词“消息驱动&#xff08;Message-Driven&#xff09;&#xff0c;事件驱动&#xff08;Event-Driven&#xff09;和流&#xff08;Streaming&#xff09;”有更清晰的了解和认知&#xff0c;其中事件驱动 EDA 作为 Gartn…

KubeVela 1.3 发布:开箱即用的可视化应用交付平台,引入插件生态、权限认证、版本化等企业级新特性

简介&#xff1a;得益于 KubeVela 社区上百位开发者的参与和 30 多位核心贡献者的 500 多次代码提交&#xff0c; KubeVela 1.3 版本正式发布。相较于三个月前发布的 v1.2 版本[1]&#xff0c;新版本在 OAM 核心引擎&#xff08;Vela Core&#xff09;&#xff0c;可视化应用交…

非常简单的清除axios请求(vue,react通用)

1、添加js文件 实现添加与删除接口的功能。 import axios from axiosclass CancelToken {// 声明一个 Map 用于存储每个请求的标识 和 取消函数static pending new Map()// 白名单, 写入接口名称static whiteRequest []/*** 得到该格式的url* param {AxiosRequestConfig} con…

阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程

简介&#xff1a;阿里云企业云原生 IT 成本治理方案助力企业落地企业 IT 成本治理的理念、工具与流程&#xff0c;让企业在云原生化的过程中可以数字化地实现企业 IT 成本管理与优化&#xff0c;成为 FinOps 领域的践行者与领先者。 作者&#xff1a;莫源 云原生技术与降本增…

阿里云数字化安全生产平台 DPS V1.0 正式发布

简介&#xff1a;数字化安全生产平台则帮助客户促进业务与 IT 的全面协同&#xff0c;从业务集中监控、业务流程管理、应急指挥响应等多维度来帮助客户建立完善专业的业务连续性保障体系。 作者&#xff1a;银桑、比扬 阿里云创立于 2009 年&#xff0c;是全球领先的云计算及…

项目实用功能-全局loading动画

1.为设么要使用全局loading 调用的每一个接口都要绑定一个loading真的很烦。 2.实现这个需要考虑哪些要素 首先全局的loading需要一个调用任何接口都要执行的地方打开&#xff0c;那就肯定是axios的前置拦截函数了。loading有加载整个页面的&#xff0c;也有加载部分页面的&…

玩转小程序压测

简介&#xff1a;小程序是移动互联网时代非常重要的流量入口。为了避免因系统性能瓶颈导致用户在使用过程中出现白屏、异常报错等问题影响用户体验&#xff0c;小程序在新功能上线前需要做好压力测试&#xff0c;评估出系统的承载能力&#xff0c;并以压测结果配置限流。让系统…

好的每日站会,应该这么开 | 敏捷开发落地指南

简介&#xff1a;高效落地敏捷开发&#xff0c;先从这3个关键活动着手。在敏捷迭代中&#xff0c;虽然迭代周期比较短&#xff0c;但依然需要对迭代过程进行有效跟进。如果在输入、过程、输出环节&#xff0c;没有要求&#xff0c;每日站会&#xff08;迭代跟进&#xff09;将会…

EasyNLP开源|中文NLP+大模型落地,EasyNLP is all you need

简介&#xff1a;EasyNLP背后的技术框架如何设计&#xff1f;未来有哪些规划&#xff1f;今天一起来深入了解。 作者 | 临在、岑鸣、熊兮 来源 | 阿里开发者公众号 一 导读 随着BERT、Megatron、GPT-3等预训练模型在NLP领域取得瞩目的成果&#xff0c;越来越多团队投身到超大…