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教程之倾斜页面
Jan 27 HTML / CSS
CSS3中currentColor关键字的妙用
Feb 27 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
Jun 25 HTML / CSS
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
Aug 02 HTML / CSS
深入浅析HTML5中的article和section的区别
May 15 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
Sep 06 HTML / CSS
钉钉企业内部H5微应用开发详解
May 12 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
Jun 09 HTML / CSS
HTML5公共页面提取作为公用代码的方法
Jun 30 HTML / CSS
AmazeUI 评论列表的实现示例
Aug 13 HTML / CSS
CSS 制作波浪效果的思路
May 18 HTML / CSS
使用CSS定位HTML元素的实现方法
Jul 07 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中函数前加&amp;符号的作用分解
2014/07/08 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
Javascript 实用小技巧
2010/04/07 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
python快速查找算法应用实例
2014/09/26 Python
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python中字符串与编码示例代码
2019/05/20 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
房产买卖委托公证书
2014/04/04 职场文书
请假条格式范文
2014/04/10 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
500字小学生检讨书
2015/02/19 职场文书