zoukankan      html  css  js  c++  java
  • 04-动画

    1.动画概述

    可通过设置多个节点来精确的控制一个或者一组动画,从而实现复杂的动画效果。

    2.语法

    1.0%是动画的开始可以用from替代,100%是动画的完成可用to替代。

    2.在CSS中用@keyframes中定义动画的样式,在用选择器调用animation调用动画

    3.动画是是元素从一种样式逐渐变化成另一种样式的效果。可以任意改变动画节点。

    @keyframes 动画名称 {
    	0%{
    		初始状态属性
    	}
    	100%{
    		结束状态属性
    	}
    }
    
    div {
    	<!--调用动画-->
    	animation-name:动画名称;
    	<!--动画持续时间-->
    	animation-duration:time;
    }
    

    3.用法

            @keyframes move {
    
                /* 初始状态 */
                0% {
                    transform: translate(0, 0);
                }
    
                /* 结束状态 */
                100% {
                    transform: translate(1200px, 0);
                }
            }
            .box1 {
                background-color: #f34;
                /* 调用动画名称 */
                animation-name: move;
                /* 动画持续时间 */
                animation-duration: 3s;
            }
    

    4.多个动画序列用法

            @keyframes move {
    
                /* 初始状态 */
                0% {
                    transform: translate(0, 0);
                }
    
                /* 百分比是动画总时间的百分比:10s+25%=2.5s */
                /* 百分比要是整数 */
                25% {
                    transform: translate(1200px, 0);
                }
    
                /* 移动的位置时相对于初始位置,不是相对于自身 */
                50% {
                    transform: translate(1200px, 500px);
                }
    
                75% {
                    transform: translate(0, 500px);
                }
    
                100% {
                    transform: translate(0, 0);
                }
            }
    
            div {
                 100px;
                height: 100px;
                background-color: #f34;
                animation-name: move;
                animation-duration: 10s;
            }
    

    4.1总结

    1.根据动画的时间,用百分比控制多个节点的动画状态。

    2.节点的百分比必须是整数。

    3.动画中的移动位置始终是相对于元素的初始位置。

    5.动画属性

    1583597076672.png

            div {
                 100px;
                height: 100px;
                background-color: #f34
                /* 动画名称(必写) */
                animation-name: move;
                /* 动画完成一个周期需要花费的时间(必写) */
                animation-duration: 3s;
            }
            
            .box2 {
                /* 动画的速度曲线,类似于过渡,默认是ease */
                animation-timing-function: ease;
                /* 动画何时开始,默认是0 */
                animation-delay: 2s;
            }
    
            .box3 {
                /* 动画播放的次数,默认是1,循环播放是infinite */
                animation-iteration-count: infinite;
            }
    
            .box4 {
                /* 要逆向播放必须要有循环播放 */
                animation-iteration-count: infinite;
                /* 动画下一周期是否逆向播放,默认是normal,逆向alternate */
                /* animation-direction: normal; */
                animation-direction: alternate;
            }
    
            .box5 {
                /* 动画结束后是否回到起始位置,默认是backwards,保持最终状态forwards */
                /* animation-fill-mode: backwards; */
                animation-fill-mode: forwards;
            }
    
            .box6:hover {
                /* 规定动画是否运行或者暂停,默认是running,暂停是paused */
                animation-play-state: paused;
            }
    

    5.1动画属性简写

            .box1 {
                /* 书写顺序 */
                /* animation: name duration timing-function delay iteration-count direction fill-mode; */
                /* animation:动画名称 动画一周期时间 运动曲线 何时开始 运动次数 是否反向 运动结束后是否保留最终状态 */
                animation: move 3s linear 1s infinite alternate backwards;
            }
    
            .box2 {
                /* 动画名称和运动时间必写,其余的省略就是默认值 */
                animation: move 3s forwards;
            }
    
            .box2:hover {
                /* 运动暂停不能简写,一般和hover搭配使用 */
                animation-play-state: paused;
            }
    
            .box3 {
                /* 动画简写没有顺序之分,如果写了两个时间,第一个时间必须是运动时间,第二个必须是何时开始 */
                animation: 3s 1s linear backwards infinite alternate move;
            }
    

    5.2总结

    1.动画属性name和duration必写,其余的不写就是默认值。

    2.动画属性简写除了动画时间和何时开始以外没有顺序之分。只有一个时间时,就是运动时间,何时开始取默认值0;有两个时间时,第一个时间必是运动时间,第二个是何时开始。

    3.运动是否暂停不包含在简写范围内,需要搭配:hover使用。

    5.3动画运动曲线属性

    1583597047641.png

           .box1 {
                /* 默认ease,低速开始,逐渐加快,结束前变慢 */
                animation: width 2s ease infinite;
            }
    
            .box2 {
                /* linear匀速 */
                animation: width 2s linear infinite;
            }
    
            .box3 {
                /* ease-in运动以低速开始 */
                animation: width 2s ease-in infinite;
            }
    
            .box4 {
                /* ease-out运动以低速结束 */
                animation: width 2s ease-out infinite;
            }
    
            .box5 {
                /* ease-in-out运动以低速开始并结束 */
                animation: width 2s ease-in-out infinite;
            }
    
            .box6 {
                /* steps运动分为几步来完成 */
                animation: width 2s steps(10) infinite;
            }
    
            .box7 {
                /* steps运动分为几步来完成 */
                animation: width 2s steps(30) infinite;
            }
    

    6.动画库调用动画

    1.下载Animate.css网站的css文件
    2.引包
    3.在要加入动画的属性加上类名animated调用
    4.最后添加你想要动画效果的类名即可

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="./animate.css">
        <style>
            div {
                 100px;
                height: 80px;
                font-size: 20px;
                color: red;
            }
        </style>
    </head>
    
    <body>
        <div class="animated jello">小艾同学</div>
        <div class="animated bounceIn">小艾同学</div>
        <div class="animated bounceOutDown">小艾同学</div>
        <div class="animated fadeInLeft">小艾同学</div>
        <div class="animated flipInY">小艾同学</div>
        <div class="animated lightSpeedIn">小艾同学</div>
        <div class="animated rotateOut">小艾同学</div>
        <div class="animated hinge">小艾同学</div>
        <div class="animated zoomOutLeft">小艾同学</div>
    </body>
    
    </html>
    

    7.案例

    1.时钟

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            .clock {
                position: relative;
                 200px;
                height: 200px;
                border: 3px solid #000;
                border-radius: 50%;
                margin: 100px auto;
            }
    
            div[class^=line] {
                position: absolute;
                top: 0;
                left: 50%;
                 2px;
                height: 200px;
                background: #000;
                z-index: -1;
            }
    
            /* 提权 */
            .clock .line1,
            .clock .line4 {
                 5px;
            }
    
            .line2 {
                transform: rotate(30deg);
            }
    
            .line3 {
                transform: rotate(60deg);
            }
    
            .clock .line4 {
                transform: rotate(90deg);
            }
    
            .line5 {
                transform: rotate(120deg);
            }
    
            .line6 {
                transform: rotate(150deg);
            }
    
            .cover {
                position: absolute;
                top: 10px;
                left: 12px;
                 180px;
                height: 180px;
                border-radius: 50%;
                background-color: #fff;
            }
    
            .second,
            .minute,
            .hour {
                position: absolute;
                left: 50%;
                transform: translateX(-50%);
                border-radius: 50% 50% 0 0;
                background-color: #000;
                transform-origin: bottom center;
                animation: clock 60s steps(60) infinite;
            }
    
            .second {
                top: 5%;
                 3px;
                height: 45%;
                background-color: red;
                animation-duration: 60s;
            }
    
            .minute {
                top: 20%;
                 5px;
                height: 30%;
                background-color: #09f;
                /* 60*60 */
                animation-duration: 3600s;
            }
    
            .hour {
                top: 30%;
                 8px;
                height: 20%;
                /* 12*60*60 */
                animation-duration: 43200s;
            }
    
            @keyframes clock {
                0% {
                    transform: translate(-50%) rotate(0deg);
                }
    
                100% {
                    transform: translate(-50%) rotate(360deg);
                }
            }
    
            .point {
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                 10px;
                height: 10px;
                border-radius: 50%;
                background-color: orange;
            }
        </style>
    </head>
    
    <body>
        <div class="clock">
            <div class="cover"></div>
            <div class="line1"></div>
            <div class="line2"></div>
            <div class="line3"></div>
            <div class="line4"></div>
            <div class="line5"></div>
            <div class="line6"></div>
            <div class="second"></div>
            <div class="minute"></div>
            <div class="hour"></div>
            <div class="point"></div>
        </div>
    </body>
    
    </html>
    

    2. 风车

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            .box {
                position: relative;
                float: left;
                 400px;
                height: 600px;
                margin-top: 100px;
            }
    
            .box .car {
                 400px;
                height: 400px;
                /* 2s匀速循环 */
                animation: fengCar 2s linear infinite;
    
            }
    
            .box .car [class ^=box] {
                position: absolute;
                /* 宽是高的一半 */
                 100px;
                height: 200px;
                /* 半圆 */
                border-radius: 200px 0 0 200px;
                background-color: #09f;
                background: linear-gradient(to top, #09f, #90f);
            }
    
            .box .car .box1 {
                left: 100px;
                top: 0;
            }
    
            .box .car .box2 {
                left: 250px;
                top: 50px;
                transform: rotate(90deg);
            }
    
            .box .car .box3 {
                left: 200px;
                top: 200px;
                transform: rotate(180deg);
            }
    
            .box .car .box4 {
                left: 50px;
                top: 150px;
                transform: rotate(-90deg);
            }
    
            .box .line {
                position: absolute;
                left: 50%;
                transform: translate(-50%, -50%);
                 5px;
                height: 400px;
                background: linear-gradient(to bottom, #09f, #90f);
                /* 将柱子藏到后面 */
                z-index: -1;
            }
    
            /* 鼠标经过悬停 */
            .box .car:hover {
                animation-play-state: paused;
            }
    
            @keyframes fengCar {
                0% {
                    transform: rotate(0deg);
                }
    
                100% {
                    transform: rotate(360deg);
                }
            }
        </style>
    </head>
    
    <body>
        <div class="box">
            <div class="car">
                <div class="box1"></div>
                <div class="box2"></div>
                <div class="box3"></div>
                <div class="box4"></div>
            </div>
            <div class="line"></div>
        </div>
        <div class="box">
            <div class="car">
                <div class="box1"></div>
                <div class="box2"></div>
                <div class="box3"></div>
                <div class="box4"></div>
            </div>
            <div class="line"></div>
        </div>
        <div class="box">
            <div class="car">
                <div class="box1"></div>
                <div class="box2"></div>
                <div class="box3"></div>
                <div class="box4"></div>
            </div>
            <div class="line"></div>
        </div>
    </body>
    
    </html>
    

    3.加载

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            .box {
                position: relative;
            }
    
            .loading,
            .loading::after,
            .loading::before {
                 10px;
                height: 40px;
                background-color: #f34;
                animation: loading 1s infinite ease-in-out alternate;
            }
    
            .loading {
                position: relative;
                margin: 100px auto;
                animation-delay: 0.2s;
            }
    
            .loading::after,
            .loading::before {
                content: "";
                position: absolute;
                top: 0;
                left: 0;
            }
    
            .loading::after {
                margin-left: 15px;
                animation-delay: 0.4s;
    
            }
    
            .loading::before {
                margin-left: -15px;
            }
    
            @keyframes loading {
                0% {
                    box-shadow: 0 0 #f34;
                    height: 40px;
                }
    
                40% {
                    box-shadow: 0 -20px #f34;
                    height: 50px;
                }
    
                100% {
                    box-shadow: 0 0 #f34;
                    height: 40px;
                }
    
            }
    
            .box p {
    
                position: absolute;
                top: 50px;
                left: 690px;
                color: #f34;
            }
        </style>
    </head>
    
    <body>
        <div class="box">
            <div class="loading"></div>
            <p> loading....</p>
        </div>
    </body>
    
    </html>
    

    4.帧动画

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
                background-color: #09f;
            }
    
            .small_fish {
                 174px;
                height: 124px;
                background: url('https://user-gold-cdn.xitu.io/2020/4/8/17157d8bff70a368?w=174&h=1512&f=png&s=103179') no-repeat;
                animation: smallYao 1.5s steps(12) infinite, swiming 8s infinite;
            }
    
            .gold_shark,
            .blue_shark {
                 509px;
                height: 250px;
            }
    
            .gold_shark {
                background: url('https://user-gold-cdn.xitu.io/2020/4/8/17157da20113b126?w=516&h=3276&f=png&s=391429') no-repeat;
                animation: goldYao 1.5s steps(12) infinite, swiming 5s infinite;
            }
    
            .blue_shark {
                background: url('https://user-gold-cdn.xitu.io/2020/4/8/17157d9b58f869ec?w=509&h=3240&f=png&s=294128') no-repeat;
                animation: blueYao 1.5s steps(12) infinite, swiming 3s infinite;
            }
    
            @keyframes smallYao {
                0% {
                    background-position: 0 0;
                }
    
                100% {
                    background-position: 0 -1512px;
                }
            }
    
            @keyframes goldYao {
                0% {
                    background-position: 0 0;
                }
    
                100% {
                    background-position: 0 -3276px;
                }
            }
    
            @keyframes blueYao {
                0% {
                    background-position: 0 0;
                }
    
                100% {
                    background-position: 0 -3240px;
                }
            }
    
            @keyframes swiming {
    
                /* 初始 */
                0% {
                    transform: translate(0px) rotate(0);
                }
    
                /* 游到头 */
                40% {
                    transform: translate(890px) rotate(0);
                }
    
                /* 掉头,换方向 */
                50% {
                    transform: translate(890px) rotate(180deg);
                }
    
                /* 回到起点 */
                90% {
                    transform: translate(0px) rotate(180deg);
                }
    
                /* 换方向 */
                100% {
                    transform: translate(0px) translate(360deg);
                }
            }
        </style>
    </head>
    
    <body>
    
        <div class="small_fish"></div>
        <div class="gold_shark"></div>
        <div class="blue_shark"></div>
    </body>
    
    </html>
    

    阴阳师

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    	<style>
    		* {
    			margin: 0;
    			padding: 0;
    		}
    
    		.f4 {
    			position: fixed;
    			bottom: 0;
    			left: 0;
    			 100%;
    			/* 高度是最高图片的高度 */
    			height: 176px;
    			/* background-color: #f34; */
    
    		}
    
    		div[class^="box"] {
    			position: absolute;
    			left: 0;
    			bottom: 0;
    			transform: translateX(-200px);
    			animation: move 10s linear infinite;
    		}
    
    		div[class^="box"]::after {
    			content: "";
    			position: absolute;
    			left: 0;
    			bottom: 0;
    			background-repeat: no-repeat;
    			animation-timing-function: steps(2);
    			animation-iteration-count: infinite;
    		}
    
    		.box1 {
    			 154px;
    			height: 121px;
    		}
    
    		.box1::after {
    			 154px;
    			height: 121px;
    			background-image: url(https://user-gold-cdn.xitu.io/2020/4/8/17157df9ff38c0fb?w=308&h=121&f=png&s=14349);
    			/* 分两步 */
    			animation: box1after .4s;
    		}
    
    		@keyframes move {
    			0% {
    				transform: translateX(-200px);
    			}
    
    			100% {
    				transform: translateX(1920px);
    			}
    		}
    
    		@keyframes box1after {
    			0% {
    				background-position: 0 0;
    			}
    
    			100% {
    				/* 整个图片的宽度 */
    				background-position: -308px 0;
    			}
    		}
    
    		.f4 .box2 {
    			 167px;
    			height: 176px;
    			animation-delay: 1.5s;
    		}
    
    		.box2::after {
    			 167px;
    			height: 176px;
    			background-image: url(https://user-gold-cdn.xitu.io/2020/4/8/17157e001b70cd4e?w=334&h=176&f=png&s=14686);
    			/* 分两步 */
    			animation: box2after .4s;
    		}
    
    		@keyframes box2after {
    			0% {
    				background-position: 0 0;
    			}
    
    			100% {
    				/* 整个图片的宽度 */
    				background-position: -334px 0;
    			}
    		}
    
    		.f4 .box3 {
    			 161px;
    			height: 149px;
    			animation-delay: 3s;
    		}
    
    		.box3::after {
    			 161px;
    			height: 149px;
    			background-image: url(https://user-gold-cdn.xitu.io/2020/4/8/17157e08859240d6?w=322&h=149&f=png&s=16439);
    			/* 分两步 */
    			animation: box3after .4s;
    		}
    
    		@keyframes box3after {
    			0% {
    				background-position: 0 0;
    			}
    
    			100% {
    				/* 整个图片的宽度 */
    				background-position: -322px 0;
    			}
    		}
    
    		.f4 .box4 {
    			 171px;
    			height: 157px;
    			animation-delay: 4.5s;
    		}
    
    		.box4::after {
    			 171px;
    			height: 157px;
    			background-image: url(https://user-gold-cdn.xitu.io/2020/4/8/17157e0d2d9f8e9b?w=342&h=157&f=png&s=15668);
    			/* 分两步 */
    			animation: box4after .4s;
    		}
    
    		@keyframes box4after {
    			0% {
    				background-position: 0 0;
    			}
    
    			100% {
    				/* 整个图片的宽度 */
    				background-position: -322px 0;
    			}
    		}
    	</style>
    </head>
    
    <body>
    	<div class="f4">
    		<div class="box1"></div>
    		<div class="box2"></div>
    		<div class="box3"></div>
    		<div class="box4"></div>
    	</div>
    </body>
    
    </html>
    

    5.地图

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>地图</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            body {
                background-color: #333;
            }
    
            .map {
                position: relative;
                 747px;
                height: 617px;
                margin: 0 auto;
                background: url(https://user-gold-cdn.xitu.io/2020/4/8/17157dbc721d5ce2?w=747&h=617&f=png&s=176409);
            }
    
            .map .city {
                position: absolute;
                top: 229px;
                right: 192px;
            }
    
            .map .tb {
                position: absolute;
                top: 498px;
                right: 79px;
            }
    
            .map .gz {
                position: absolute;
                top: 543px;
                right: 193px;
            }
    
            .map .city .dotted {
                 8px;
                height: 8px;
                background-color: #09f;
                border-radius: 50%;
            }
    
            /* 选择div里面以pulse开头的元素 */
            .map .city div[class^="pulse"] {
                /* 让波纹在city中水平垂直居中 */
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                 8px;
                height: 8px;
                /* 波纹设置阴影 */
                box-shadow: 0 0 12px #009dfd;
                border-radius: 50%;
                /* 设置2s匀速循环播放 */
                animation: pulse 1.2s linear infinite;
            }
    
            /* 让波纹更有层次感,设置每个波纹的开始时间不一样 */
            /* 提权层叠 */
            .map .city div.pulse2 {
                animation-delay: .4s;
            }
    
            .map .city div.pulse3 {
                animation-delay: .8s;
            }
    
            @keyframes pulse {
                0% {}
    
                50% {
                     40px;
                    height: 40px;
                    opacity: 1;
                }
    
                100% {
                     80px;
                    height: 80px;
                    opacity: 0;
                }
            }
        </style>
    </head>
    
    <body>
        <!-- 地图 -->
        <div class="map">
            <!-- 城市 -->
            <div class="city">
                <!-- 小点 -->
                <div class="dotted"></div>
                <!-- 波纹 -->
                <div class="pulse1"></div>
                <div class="pulse2"></div>
                <div class="pulse3"></div>
            </div>
            <div class="city tb">
                <!-- 小点 -->
                <div class="dotted"></div>
                <!-- 波纹 -->
                <div class="pulse1"></div>
                <div class="pulse2"></div>
                <div class="pulse3"></div>
            </div>
            <div class="city gz">
                <!-- 小点 -->
                <div class="dotted"></div>
                <!-- 波纹 -->
                <div class="pulse1"></div>
                <div class="pulse2"></div>
                <div class="pulse3"></div>
            </div>
        </div>
    </body>
    
    </html>
    
  • 相关阅读:
    2.2 Scala基础知识
    Linux---用户及权限管理类命令
    Linux---进程控制类命令
    Linux---vim编辑文本文件
    Linux---文件压缩与解压缩命令
    Linux---查找命令
    Linux---基本目录与文件命令
    nginx配置技巧汇总
    Go 内嵌静态资源
    go语言的time.Sleep
  • 原文地址:https://www.cnblogs.com/xiaoaitongxue/p/12658932.html
Copyright © 2011-2022 走看看