欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CSS3动画

程序员文章站 2022-06-23 15:06:29
...

效果图

跟着,渡一教育学前端,脑壳炸了????,不过我还是做出来了,复制下面的代码,粘贴就可以食用了
CSS3动画

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>加载动画</title>
    <link rel="stylesheet" href="css/index.css">
    <!-- jquery在线引入网址 -->
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <style>
        /* 初始化所有的元素 */
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            width: 100%;
            height: 100%;
            /* 设置背景 */
            background-color: aqua;
            /*
            一种布局方式。它即可以应用于容器中,也可以应用于行内元素
            目前,它已经得到了所有浏览器的支持。
            Flex是Flexible Box的缩写,意为"弹性布局",
            用来为盒状模型提供最大的灵活性。设为Flex布局以后,
            子元素的float、clear和vertical-align属性将失效。
            */
            display: flex;
            /* 
            实现的是水平居中
            */
            justify-content: center;
            /* 
            实现的是垂直居中
            */
            align-items: center;
        }
        /* 设置怪物样子 */
        .monster{
            position: relative;
            width: 100px;
            height: 100px;
            /* 0.5相当于50% 就变成了一个圆 */
            border-radius: 10px;
            background-color: black;
            /* 分开两个怪物 */
            margin: 10px;
            display: flex;
            justify-content: center;
            align-items: center;
            /* 按照列来排序 默认是行排序 */
            flex-direction: column;
            /* 设置阴影 第一个是X的偏移量 第二个是Y的偏移量 第三个是阴影的距离 最后一个是阴影的颜色值*/
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
            /* 设置动画 第一个设置变量名 name 第二个时间 一直跳一直跳 0到-50 来回都做一个动画,不然非常突兀的感觉,就i有一个缓冲的效果*/
            animation: jumping 0.8s infinite alternate;
        }
        /* 设置眼睛 */
        .monster .eye{
            /* 基于父级的40% */
            width: 40%;
            height: 40%;
            /* 设置圆角 */
            border-radius: 50%;
            background-color: white;
            margin: 10px;
            /* 为了设置眼球居中 */
            display: flex;
            justify-content: center;
            align-items: center;
        }
        /* 设置眼球 */
        .monster .eye .eyeBall{
            width: 50%;
            height: 50%;
            border-radius: 50%;
            background-color: thistle;
            animation: eyemove 1.6s infinite alternate;
        }
        .monster .mouth{
            width: 32%;
            height: 12px;
            border-radius: 12px;
            background-color: white;
        }
        /* 头上的角
            :befor和::before写法是等效的
            :befor是CSS2的写法,::before是CSS3的写法
            伪类对象要配合content属性一起使用
            伪类对象不会出现在DOM中,所以不能通过js来操作,仅仅是在 CSS 渲染层加入
            伪类对象的特效通常要使用:hover伪类样式来**
            之所以被称为伪元素,是因为他们不是真正的页面元素
            tml没有对应的元素,但是其所有用法和表现行为与真正的页面元素一样
            可以对其使用诸如页面元素一样的css样式,
            表面上看上去貌似是页面的某些元素来展现,
            实际上是css样式展现的行为,因此被称为伪元素。
            :after 伪元素在元素之后添加内容。
            头上的角是两个 -- 旋转 45°之后拼成的
        */
        .monster::before,.monster::after{
            /* absolute会找他最近的有定位的父级定位,不管是reletive还是absolute */
            position: absolute;
            /* content 属性与 :before 及 :after 伪元素配合使用,来插入生成内容。 */
            content: '';
            /* 变成一个盒子,可以设置 宽高 */
            display: block;
            width: 20%;
            height: 10px;
            border-radius: 10px;
            background-color: white;
            /* 基于monster定位 */
            top: -10px;
            left: 50%;
        }
        /* 设置每个角的平移和旋转 */
        .monster::before{
            /* 平移 旋转rotate */
            transform: translateX(-70%) rotate(45deg);
        }
        .monster::after{
            transform: translateX(-30%) rotate(-45deg);
        }
        .monster.blue{
            /* 给他加上延迟 第一个跳了 他才跳 */
            animation-delay: 0.5s;
            background-color:wheat;
        }
        .monster.blue .eyeBall,.monster.blue .mouth{
            background-color: darkkhaki;
        }
            /* @keyframes规则可以使用来创建动画,
            创建动画是通过逐步改变从一个CSS样式到另一个CSS样式,
            在动画过程中,您可以更改CSS样式的设定多次,
            指定的变化时发生时使用%,或关键字"from"和"to",
            这是和0%到100%相同,0%是开头动画,
            100%是当动画完成。为了获得最佳的浏览器支持,
            您应该始终定义为0%和100%的选择器。
            @keyframes规则是css3中新增规则,目前主流浏览器都支持该规则(加浏览器对应的前缀),
            但不兼容IE 9以及更早版本的浏览器。
            关键帧 
            jumping 相当于变量
            */
        @keyframes jumping{
            50%{
                top: 0;
                /* 在他没有往上跳的时候的阴影 */
                box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
            }
            100%{
                top: -50px;
                /* 在他跳起来的时候 Y方向变*/
                box-shadow: 0 120px 20px rgba(0, 0, 0, 0.2);
            }
        }
        /* 设置眼睛X方向移动 */
        @keyframes eyemove{
            0%,10%{
                transform: translate(50%);
            }
            90%,100%{
                transform: translate(-50%);     
            }
        }
        /* 铺满屏幕 */
        .pageLoading{
            /* 基于窗口的定位 */
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: wheat;
            display: flex;
            justify-content: center;
            align-items: center;
            /* 列 */
            flex-direction: column;
            /* 在他执行opacity 的时候也有一个加载动画 */
            transition: opacity 0.5s;
        }
        /* 白色的条 */
        .pageLoading .loading{
            width: 200px;
            height: 8px;
            background-color: white;
            border-radius: 5px;
            /* 调整距离 */
            margin-top: 50px;
            /* 控制增长的进度条 */
            overflow: hidden;
        }
        .pageLoading .loading .bar{
            /* 这个里面的进度条跟外面的一样的 初始是 0 */
            width: 0%;
            height: 100%;
            background-color: tomato;
        }
        .pageLoading.complete{
            /* 透明度 不透明0.5 */
            opacity: 0;
        }
        /* monster 旋转一圈 */
        .pageLoading.complete .monster{
            /* 动画执行的时间 */
            transition: 0.5s;
            /* 缩小 旋转 */
            transform: scale(0.1) rotateZ(360deg);
        }
    </style>
</head>
<body>
    <!-- 这是第二个界面看到的内容 -->
    <div>
        <!-- 文字部分 -->
        <h2 class="monsterText">Hello 
            <br>Adger
        </h2>      
        <h3>I want you to be better</h3>
    </div>
    <!-- 第一个怪物 -->
    <div class="monster">
        <!-- 眼睛部分 -->
        <div class="eye">
            <!-- 眼球部分 -->
            <div class="eyeBall"></div>
        </div>
        <!-- 嘴巴部分 -->
        <div class="mouth"></div>
    </div>

    <!-- 第二个怪物部分 -->
    <div class="monster blue">
        <!-- 眼睛部分 -->
        <div class="eye">
            <!-- 眼球部分 -->
            <div class="eyeBall"></div>
        </div>
        <!-- 嘴巴部分 -->
        <div class="mouth"></div>
    </div>

    <!-- loading加载动画 这个div覆盖到那些div之上 -->
    <div class="pageLoading">
        <!-- 第三个怪物部分 -->
    <div class="monster">
        <!-- 眼睛部分 -->
        <div class="eye">
            <!-- 眼球部分 -->
            <div class="eyeBall"></div>
        </div>
        <!-- 嘴巴部分 -->
        <div class="mouth"></div>
    </div>

    <!-- loading加载 上面的条-->
    <div class="loading">
        <!-- 在里面一直跑的条 -->
        <div class="bar"></div>
    </div>
    </div>

    <script>
        var per = 0;
        // 不断的让width += 1 每隔 30 毫秒就加等于 1
        var time;
        console.log(time)
        time = setInterval(function() {
            $(".bar").css("width",per + "%")
           // 每次一进来 就加等于 1 
           per += 1; 
           // 如果 width > 100 了 就停下来 展示 
           if(per > 100){
               // 当大于 100的 时候 给pageLoading 加一个class类名透明度变透明 complete不能加点 然后清除时间
               $(".pageLoading").addClass('complete');
               // 当大于 100的 时候 monsterText 慢慢展示
               setTimeout(function () {
                   $(".monsterText").html("<h2>I am adger</h2>") 
               },3000);
              clearInterval(time);  
           }
        },30);
    </script>
</body>
</html>
相关标签: html