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动画过渡实现鼠标跟随导航效果
Feb 08 HTML / CSS
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
Dec 28 HTML / CSS
纯css3(无图片/js)制作的几个社交媒体网站的图标
Mar 21 HTML / CSS
基于DOM+CSS3实现OrgChart组织结构图插件
Mar 02 HTML / CSS
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
Apr 26 HTML / CSS
css3实现wifi信号逐渐增强效果实例
Aug 09 HTML / CSS
详解css position 5种不同的值的用法
Jul 30 HTML / CSS
CSS3 input框的实现代码类似Google登录的动画效果
Aug 04 HTML / CSS
css3 利用transform打造走动的2D时钟
Oct 20 HTML / CSS
html5仿支付宝密码框的实现代码
Sep 06 HTML / CSS
详解HTML5中的manifest缓存使用
Sep 09 HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
Jul 10 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实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
用python批量移动文件
2021/01/14 Python
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
个人简历的自荐信
2013/10/23 职场文书
小学教师的自我评价范例
2013/10/31 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
民事申诉状范本
2015/05/20 职场文书
个人业务学习心得体会
2016/01/25 职场文书
《日月潭》教学反思
2016/02/20 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android