html+css实现滚动到元素位置显示加载动画效果


Posted in HTML / CSS onAugust 02, 2021

每次滚动到元素时,都显示加载动画,如何添加?

元素添加初始参数

以上图中的动画为例,添加俩个左右容器,将内容放置在容器内部。

添加初始数据,默认透明度0、左右分别移动100px。

//左侧容器
  .item-leftContainer {
    opacity: 0;
    transform: translateX(-100px);
  }
  //右侧容器
  .item-rightContainer {
    opacity: 0;
    transform: translateX(100px);
  }

添加动画数据

在less中添加动画数据。这里只设置了to,也可以省略第1步中的初始参数设置而在动画里设置from。

执行后,透明度由0到1,俩个容器向中间移动100px回到原处。

//动画
  @keyframes showLeft {
    to {
      opacity: 1;
      transform: translateX(0px);
    }
  }
  @keyframes showRight {
    to {
      opacity: 1;
      transform: translateX(0px);
    }
  }
  @keyframes hideLeft {
    to {
      opacity: 0;
      transform: translateX(-100px);
    }
  }
  @keyframes hideRight {
    to {
      opacity: 0;
      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" //隐藏动画
        }
    }

到此这篇关于html+css实现滚动到元素位置显示加载动画效果的文章就介绍到这了,更多相关html加载动画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
全面解析CSS Media媒体查询使用操作(推荐)
Aug 15 HTML / CSS
基于CSS3实现的几个小loading效果
Sep 27 HTML / CSS
不同浏览器对CSS3和HTML5的支持状况
Oct 31 HTML / CSS
使用CSS3 制作一个material-design 风格登录界面实例
Dec 12 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
Apr 25 HTML / CSS
在HTML5 canvas里用卷积核进行图像处理的方法
May 02 HTML / CSS
HTML5 Canvas标签使用收录
Jul 07 HTML / CSS
HTML中fieldset标签概述及使用方法
Feb 01 HTML / CSS
html5 offlline 缓存使用示例
Jun 24 HTML / CSS
HTML5实现锚点时请使用id取代name
Sep 06 HTML / CSS
使用canvas绘制贝塞尔曲线
Dec 17 HTML / CSS
完美实现CSS垂直居中的11种方法
Mar 27 HTML / CSS
纯html+css实现打字效果
html form表单基础入门案例讲解
Jul 21 #HTML / CSS
带你了解CSS基础知识,样式
Jul 21 #HTML / CSS
CSS实现隐藏搜索框功能(动画正反向序列)
Jul 21 #HTML / CSS
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
html5实现点击弹出图片功能
Jul 16 #HTML / CSS
纯CSS3实现div按照顺序出入效果
You might like
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
过虑特殊字符输入的js代码
2010/08/05 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
Python操作列表之List.insert()方法的使用
2015/05/20 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python实现图片插入文字
2019/11/26 Python
python 实现视频 图像帧提取
2019/12/10 Python
python3下pygame如何实现显示中文
2020/01/11 Python
python怎么判断素数
2020/07/01 Python
曼城官方网上商店:Manchester City
2019/09/10 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
linux面试题参考答案(4)
2013/01/28 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
mysql创建存储过程及函数详解
2021/12/04 MySQL
python基础之//、/与%的区别详解
2022/06/10 Python