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标签来 ...
随机推荐
- zookeeper安装部署步骤
安装步骤 本安装教程,采用zookeeper 3.6.1 装java 下载zk包,分发到各个机器 确定或创建一个zookeeper的数据存放路径,并在该路径下创建一个myid文件,其中设置当前zook ...
- [JavaWeb基础] 028.CSS简介和基础语法
css 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现 ...
- [批处理教程之MySQL]001.MySQL 常用命令大全
连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MySQL 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p ...
- LDA模型笔记
“LDA(Latent Dirichlet Allocation)模型,模型主要解决文档处理领域的问题,比如文章主题分类.文章检测.相似度分析.文本分段和文档检索等问题.LDA主题模型是一个三层贝叶斯 ...
- PHP生成指定范围的日期
/** * 生成指定范围的日期 * * @param $string $startDate 开始日期 2020-01-01 * @param $string $endDate 结束日期 2020-01 ...
- 03 . MysSQL权限和备份
MySQL权限介绍 mysql中存在4个控制权限的表,分别为 user db tables_priv columns_priv 用户和权限内容放在mysql库中,该库中有一张名为user的表,记录了用 ...
- 拨号vps,拨号vps是什么意思干什么用的,如何使用拨号vps
首先,拨号vps是动态IP的VPS.vps虚拟服务器.拨号服务器.有些业务,如刷单.投票等操作对ip地址有限制,不能过多的使用.而拨号VPS通过拨号上网,每拨号一次号,就变一次IP,完成ip地址的动态 ...
- day07 作业
作业(必做题):#1. 使用while循环输出1 2 3 4 5 6 8 9 10count=0while count<11: if count==7: count+=1 continue pr ...
- Rocket - tilelink - fastProperty
https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大) ...
- Rocket - util - MaskGen
https://mp.weixin.qq.com/s/_aJqf1cFJDK5RVRBhxTWOw 介绍MaskGen的实现. 1. 基本介绍 给定总线宽度beatBytes,根 ...