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>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 查找文件命令find和文件内容查找命令grep

    查找文件命令find和文件内容查找命令grepfind 命令在 Linux 命令中 find 用于在指定目录下查找文件 任何位于参数之前的字符串都将被视为欲查找的目录名 其支持按名称查找 按正则表达式查找 按文件大小查找 按文件权限查找等多种查询方式 如果在使用该命令时 不设置任何参数 则 find 命令将在当前目录下查找子目录与文件 并且将查找到的子目录和文件全部进行显示 语法 find 目标目录 路径 选项 参数常用选项列表和含义 perm 权限数值 查找符合指定的权限数值的文件或目 权限数值 选项

    2025年10月6日
    4
  • 【愚公系列】2022年03月 FTP及Telnet弱口令渗透测试之ftp扫描器

    【愚公系列】2022年03月 FTP及Telnet弱口令渗透测试之ftp扫描器一:ftp批量登录二:ftp爆破

    2022年10月1日
    3
  • sql中ddl和dml(sql与access的区别)

    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netDDL和DML之间的主要区别在于:DDL有助于更改数据库的结构,而DML有助于管理数据库中的数据。本质区别DDL代表数据定义语言(DataDefinitionLanguage),是一种有助于创建数据库模式的SQL命令。而DML代表数据操作语言(DataManipulationLanguage),是一种有助于检索和管理关系数据库中数据的SQL命令

    2022年4月15日
    76
  • qmake:高级用法

    qmake:高级用法一、添加新的配置特性特性(features)是*.prf文件中自定义函数和定义的集合(Qt安装目录\mkspecs\features中有很多*.prf文件)。存放特性文件的目录有很多地方,qmake在查找.prf文件时会按以下顺序检查每个目录:在QMAKEFEATURES环境变量中列出的目录中, 在QMAKEFEATURES属性变量中列出的目录中。 在位于mkspecs目录中的features目录中。 在QMAKESPEC环境变量提供的目录下的featu

    2022年5月19日
    58
  • 拉格朗日中值定理_拉格朗日中值定理解决高考题

    拉格朗日中值定理_拉格朗日中值定理解决高考题定理表述定理表述如果函数f(x)满足:(1)在闭区间[a,b]上连续;(2)在开区间(a,b)内可导;那么在开区间(a,b)内至少有一点使等式成立。其他形式其他形式记令则有上

    2022年8月6日
    7
  • 计算机二级Python公共基础部分

    计算机二级Python公共基础部分计算机二级Python公共基础部分011.基本数据结构与算法1.1算法的基本概念算法是一种设计好的计算序列,用来解决一类问题。算法复杂的包括:时间复杂度和空间复杂度。时间复杂度指计算工作量,空间复杂度指内存空间的要求。综合起来:如果一个算法的执行次数是T(n),那么只保留最高次项,同时忽略最高项的系数后得到函数f(n),此时算法的时间复杂度就是O(f(n))。为了方便描述,…

    2022年6月11日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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