html/css 滚动到元素位置,显示加载动画
每次滚动到元素时,都显示加载动画,如何添加?

元素添加初始参数
以上图中的动画为例,添加俩个左右容器,将内容放置在容器内部。
添加初始数据,默认透明度0、左右分别移动100px。
//左侧容器
.item-leftContainer {
opacity:;
transform: translateX(-100px);
}
//右侧容器
.item-rightContainer {
opacity:;
transform: translateX(100px);
}
添加动画数据
在less中添加动画数据。这里只设置了to,也可以省略第1步中的初始参数设置而在动画里设置from。
执行后,透明度由0到1,俩个容器向中间移动100px回到原处。
//动画
@keyframes showLeft {
to {
opacity:;
transform: translateX(0px);
}
}
@keyframes showRight {
to {
opacity:;
transform: translateX(0px);
}
}
@keyframes hideLeft {
to {
opacity:;
transform: translateX(-100px);
}
}
@keyframes hideRight {
to {
opacity:;
transform: translateX(100px);
}
}
触发动画
页面加载/刷新触发 - 在componentDidMount中执行
页面滚动时触发 - 在componentDidMount、componentWillUnmount添加监听/注销页面滚动的事件
校验当前滚动高度与元素的位置差异:
window.pageYOffset(滚动距离) + windowHeight(窗口高度) > leftElement.offsetTop (元素的相对位置)+ parentOffsetTop(父元素的相对位置) + 200
- 真正的滚动视觉位置 - window.pageYOffset(滚动距离) + windowHeight(窗口高度)
- 元素距离顶部的高度 - 这里使用了leftElement.offsetTop + parentOffsetTop,原因是父容器使用了absolute绝对定位。如果是正常布局的话,使用元素当前的位置leftElement.offsetTop即可
- 额外添加200高度,是为了优化视觉体验。当超出200高度时才触发动画
当页面滚动到下方,触发显示动画;当页面重新滚动到上方,触发隐藏动画。
componentDidMount() {
this.checkScrollHeightAndLoadAnimation();
window.addEventListener('scroll', this.bindHandleScroll);
}
componentWillUnmount() {
window.removeEventListener('scroll', this.bindHandleScroll);
}
bindHandleScroll = (event) => {
this.checkScrollHeightAndLoadAnimation();
}
checkScrollHeightAndLoadAnimation() {
const windowHeight = window.innerHeight;
let parentEelement = document.getElementById("softwareUsingWays-container") as HTMLElement;
const parentOffsetTop = parentEelement.offsetTop;
let leftElement = (parentEelement.getElementsByClassName("item-leftContainer") as HTMLCollectionOf<HTMLElement>)[0];
if (window.pageYOffset + windowHeight > leftElement.offsetTop + parentOffsetTop + 200) {
leftElement.style.animation = "showLeft .6s forwards" //添加动画
} else {
leftElement.style.animation = "hideLeft 0s forwards" //隐藏动画
}
let rightElement = (parentEelement.getElementsByClassName(".item-rightContainer") as HTMLCollectionOf<HTMLElement>)[0];
if (window.pageYOffset + windowHeight > rightElement.offsetTop + parentOffsetTop + 200) {
rightElement.style.animation = "showRight .6s forwards" //添加动画
} else {
rightElement.style.animation = "hideRight 0s forwards" //隐藏动画
}
}
关键字:React 滚动、加载/出现动画
html/css 滚动到元素位置,显示加载动画的更多相关文章
- 原生JS实现随着鼠标滚动到元素位置触发对应css3动画,简单易用滚动监测
预览链接:http://www.vanwee.cn/%E6%BB%9A%E5%8A%A8%E7%9B%91%E5%90%AC/ <style> body{overflow-x: hidde ...
- js实现一个长页面中的图片懒加载即滚动到其位置才加载
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 使用Django的时候,页面请求正常,也没有报任何错误,甚至连警告都没有的情况下,页面却还是原地不动或者闪一下或者无限显示加载动画的情况下的解决办法
这个问题描述比较笼统,但根据我目前遇到过两种情况来看,似乎都比较重要而且实用,所以打算分别讲述一下. 说明:Django的版本是Django2.0 第一种:URL配置错误 页面闪一下,却原地不动,可能 ...
- 网页图表Highcharts实践教程之标签组与加载动画
网页图表Highcharts实践教程之标签组与加载动画 Highcharts标签组 在图表的大部分元素都提供了标签功能.但非常多时候,我们须要额外说明一些信息.这个时候借助原有的图表元素的标签功能就 ...
- CoreThink开发(十三)增加页面加载动画
效果: 加载动画是由jquery和fakeloader这个js库实现的. 其实这个也可以做成一个插件,用数据库记录是否开启,选择动画的样式,那样扩展性会更好. 源码资源已经上传在我的csdn下载中. ...
- 利用CAReplicatorLayer实现的加载动画
在上一篇中,笔者简要介绍了CAReplicatorLayer,在本篇中,将介绍具体的实用价值. 实用CAReplicatorLayer作为核心技术实现加载动画. 首先,创建一个UIView的子类 @i ...
- 通过$.ajax设置预加载动画加强用户体验
以前在jquery请求数据时,总喜欢用简洁的$.get与$.post提交数据,但有时发现由于网速的问题,有些时候网站加载js获得的数据会非常慢,于是就想能不能请求数据中间,给加载数据一个提示,增加用户 ...
- CSS 实现加载动画之五-光盘旋转
今天做的这个动画叫光盘旋转,名字自己取的.动画的效果估计很多人都很熟悉,就是微信朋友圈里的加载动画.做过前面几个动画,发现其实都一个原理,就是如何将动画的元素如何分离出来.这个动画的实现也很简单,关键 ...
- CSS 实现加载动画之一-菊花旋转
最近打算整理几个动画样式,最常见的就是我们用到的加载动画.加载动画的效果处理的好,会给页面带来画龙点睛的作用,而使用户愿意去等待.而页面中最常用的做法是把动画做成gif格式,当做背景图或是img标签来 ...
随机推荐
- MyBatis中的命名空间namespace的作用
1.定义mapper接口,面向接口编程. 2.在大型项目中,可能存在大量的SQL语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了.为了解决这个问题,在MyBatis中,可以为每个映 ...
- 前端内网穿透,localtunnel你值得拥有!
一个前端在调试本地页面时,总会有些稀奇古怪的需求,比如产品立刻要看你的页面效果,而此时有没有上线环境折腾给他看,那此时通过内网穿透的方式,实时把你的项目生成一个在线链接丢给他,让他去找那一像素的bug ...
- CEF 与 QML 类比
Qt平台+QML(+QtQuick)+JS = CEF平台+HTML5(+JQueryUI)+JS 运行平台(容器): QT CEF 容器widgets: QtWidgets cef-views 语言 ...
- 剑指Offer之二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解法1:使用Integer.toBinanryString()返回int变量的二进制表示的字符串. [在Intege ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 用AutoMapper搞定对象映射
上一篇文章(https://www.cnblogs.com/meowv/p/12961014.html)集成了定时任务处理框架Hangfire,完成了一个简单的定时任务处理解决方案. 本篇紧接着来玩一 ...
- html5学习之路_006
表单与php交互 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 国际化之fmt标签
1. 什么是国际化和本地化: I. 本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯.II. 国际化:软件开发时,让它能支持多个国家和地区的本地化应用.使得应用软 ...
- PHP生成指定范围的日期
/** * 生成指定范围的日期 * * @param $string $startDate 开始日期 2020-01-01 * @param $string $endDate 结束日期 2020-01 ...
- websocket ddos检测脚本
from websocket import create_connection while(1): ws = create_connection('wss://ha-cmim.cmcc-cs.cn:1 ...
- ASP.NET Core 3.x API版本控制
前言 一般来说需要更改我们API的时候才考虑版本控制,但是我觉得我们不应该等到那时候来实现它,我们应该有一个版本策略从我们应用程序开发时就开始制定好我们的策略,我们一直遵循着这个策略进行开发. 我们其 ...