HTML 动画(一)[通俗易懂]

HTML 动画(一)[通俗易懂]入场动画(一)图片从左至右逐渐消失实现逻辑:a:将遮罩分割为数个div,多个div通过图片定位拼接成一张图片;b:运用requestAnimationFrame+animation实现动画;c:遮罩层网格状逐步消失设置background-position:0;2.效果图:3.代码:<!DOCTYPEhtml><htmllang=”en”&…

大家好,又见面了,我是你们的朋友全栈君。

动画(一)

图片从左至右逐渐消失

  1. 实现逻辑:
    a: 将遮罩分割为数个div,多个div通过图片定位拼接成一张图片;
    b: 运用requestAnimationFrame + animation实现动画;
    c: 遮罩层网格状逐步消失设置background-position: 0;

  2. 效果图:
    在这里插入图片描述

  3. 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        *{
            padding: 0;
            margin: 0;
        }
        #maskBox {
            width: 800px;
            height: 600px;
            overflow: hidden;
            position: absolute;
            top: 0;
            left: 0;
        }
        /* 精灵图 */
        #maskBox .parentBox {
            width: 100%;
            height: 100px;
            overflow: hidden;
        }
        .parentBox div {
            width: 100px;
            height: 100px;
            float: left;
            background: url("https://img-blog.csdnimg.cn/20210308163835396.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MzgwMzEx,size_16,color_FFFFFF,t_70#pic_center") no-repeat left center;
            background-size: 800px 600px;
            overflow: hidden;
            border: 1px solid #ccc;
            box-sizing: border-box;
        }
        .opacity{
            animation:opacity 5s ease-in-out 0s 1 alternate forwards; /*循环完成保留最后一帧画面*/
            -webkit-animation:opacity 5s ease-in-out 0s 1 alternate forwards; /*Safari and Chrome*/
        }

        /* 去掉 background-position 无图片折叠效果 */
        @keyframes opacity{
            from {opacity:1;}
            to {opacity:0;background-position: 0;}
        }
    </style>
</head>
<body>
    <!-- 内容 -->
    <div style=" width: 800px;height: 600px;background: #efa925;font-size: 50px;">内容。。。</div>
    <!-- 遮罩 -->
    <div id="maskBox"></div>

    <script  type="text/javascript">
        function Render() {
            let r_this = this;
            let lowNum = 48,colNum = 9; // 宽800/100 = 8;高 600/100=6; 个数 8*6 =48;
            let p_box = document.getElementById('maskBox');
            let pDiv = null,cDiv = null,dX = 0,dY = 0,divHidden = null;
            let index = 0,childernArr = [];
            //  创建DIV css精灵拼接图片
            r_this.createDiv = () => {
                for (let i=0;i<colNum;i++) {
                    pDiv = document.createElement("div"); // 创建父Div
                    p_box.appendChild(pDiv);
                    pDiv.setAttribute('class','parentBox');
                    for (let a=0;a<lowNum;a++) {
                        cDiv = document.createElement("div"); // 创建子div
                        pDiv.appendChild(cDiv);
                        dX = cDiv.offsetLeft;
                        dY = cDiv.offsetTop;
                        cDiv.style['background-position']=''+(-dX)+'px '+(-dY)+'px'; // 每个div都贴上图片
                        cDiv.setAttribute('class','div_'+a);
                    }
                }
            }
            // 动画 将div 逐步消失
            r_this.animation = () =>{
                childernArr = document.querySelectorAll("div.div_"+index);
                for(let i=0;i<childernArr.length;i++) {
                    childernArr[i].setAttribute('class','opacity')
                }
                index ++
                // 关闭动画 
                if (index >= lowNum) {
                    p_box.remove(); // 清除遮罩
                    window.cancelAnimationFrame(divHidden);
                    divHidden = null;
                    return;
                }

                divHidden = window.requestAnimationFrame(function( callback ){
                    window.setTimeout(r_this.animation, 1000 / 20);//定义每秒执行60次动画
                });     
            }
        }
       // 创建方法
       var render = new Render();
       
       // 创建遮罩div图片
       render.createDiv();


       // 让遮罩先停留一秒开始动画
        setTimeout(function(){
            render.animation();
        },1000)
    </script>
</body>
</html>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148011.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 内核置顶[置顶] Linux 内核定时器

    内核置顶[置顶] Linux 内核定时器

  • 敏捷项目管理的流程_敏捷开发项目管理方法

    敏捷项目管理的流程_敏捷开发项目管理方法引言:敏捷绝非某一种特定的开发方法,它只是一种应对快速变化的需求的一种软件开发能力。敏捷本身只包含了《敏捷软件开发宣言》和《敏捷软件的十二条原则》两份文档。敏捷的起源:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。目前很多互联网公司都在搞或者想

    2022年10月30日
  • FileUpload1上传控件

    FileUpload1上传控件stringfn=System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);//获取文件的名字stringfilname=F

  • matlab图像处理初步,MATLAB数字图像处理初步「建议收藏」

    matlab图像处理初步,MATLAB数字图像处理初步「建议收藏」实验一MATLAB数字图像处理初步一、实验目的1、熟悉及掌握在MATLAB中能够处理哪些格式图像。(五号宋体)2、熟练掌握在MATLAB中如何读取图像。3、掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。4、掌握如何在MATLAB中按照指定要求存储一幅图像的方法。5、图像间如何转化。二、实验原理1、数字图像的表示和类别一幅图像可以被定义为一个二维函数f(x,y),其中x…

  • 有没有提醒喝水的打卡软件_小爱同学定时打卡

    有没有提醒喝水的打卡软件_小爱同学定时打卡本文方案来自CSDN博主「机灵鹤」方案详情可查看原文:https://smartcrane.blog.csdn.net/article/details/121837850本项目实现了一个久坐提醒和喝水提醒的小助手,在检测到连续工作较长时间之后,会打印纸条,提醒我们起身活动一下;在设定的喝水时间到了以后,也会打印纸条,提醒我们去喝水。项目用到的硬件设备有:硬件都备的差不多了,在开发时我遇到了一个比较棘手的问题,就是咕咕机跟人体传感器它也不是同一家的设备啊!虽然两家都有各自的控制APP,但是它们毕竟是两套系

  • linux 查看当前用户密码

    linux 查看当前用户密码用过Linux系统的人都知道,Linux系统查看用户不是会Windows那样,鼠标右键看我的电脑属性,然后看计算机用户和组即可。那么Linux操作系统里查看所有用户该怎么办呢?用命令。其实用命令就能很轻松的查看到Linux系统有哪些用户。  1、Linux里查看所有用户  (1)在终端里.其实只需要查看/etc/passwd文件就行了.  (2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户.  或者用cat/etc/passwd|cut-f1-d:  2、用.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号