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 相关文章推荐
CSS3画一个阴阳八卦图
Mar 09 HTML / CSS
CSS伪类与CSS伪元素的区别及由来具体说明
Dec 07 HTML / CSS
纯HTML5+CSS3制作图片旋转
Jan 12 HTML / CSS
使用HTML5原生对话框元素并轻松创建模态框组件
Mar 06 HTML / CSS
HTML5: Web 标准最巨大的飞跃
Oct 17 HTML / CSS
HTML5 canvas基本绘图之绘制线条
Jun 27 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
Aug 17 HTML / CSS
Canvas多边形绘制的实现方法
Aug 05 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
Sep 09 HTML / CSS
Html5页面播放M4a音频文件
Mar 30 HTML / CSS
纯html+css实现打字效果
Aug 02 HTML / CSS
CSS使用伪类控制边框长度的方法
Jan 18 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
php设计模式  Command(命令模式)
2011/06/17 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
js控制div层的叠加简单方法
2016/10/15 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
python获取栅格点和面值的实现
2020/03/10 Python
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
给老婆的搞笑检讨书
2014/01/12 职场文书
心理健康活动总结
2014/04/30 职场文书
文明演讲稿范文
2014/05/12 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
如何使用pdb进行Python调试
2021/06/30 Python
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle