首页 前端知识 web前端开发—进阶css(动画)

web前端开发—进阶css(动画)

2024-04-29 12:04:02 前端知识 前端哥 837 157 我要收藏

目录

动画

实现步骤:

        1. 定义动画

        2. 使用动画

动画属性:

animation复合属性代码:

animation复合属性拆分写法代码:

精灵动画制作步骤:

多组动画:

综合实例:

        综合实例—走马灯(无缝动画)代码:

        综合实例—全民出游主页动画代码:


动画

目标:使用animation添加动画效果

思考:过渡可以实现什么效果?

   答:实现2个状态间的变化过程。

动画效果:实现多个状态间的变化过程,动画过程可控(重复播放、最终画面、是否暂停)

动画的本质:是快速切换大量图片时在人脑中形成的具有连续性的画面 ;构成动画的最小单元:帧或动画帧。

实现步骤:

        1. 定义动画

        2. 使用动画

  动画实现的步骤代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动画实现步骤</title>
    <style>
        .box {
            width: 200px;
            height: 100px;
            background-color: pink;

            /* 使用动画的属性 */
            animation: change 2s;
        }

        /* 一. 定义动画:从200变大到600 */
   /*     @keyframes change {
            from {
                width: 200px;
            }
            to {
                width: 600px;
            }
        }
        */

        /* 二. 定义动画:200 到 长500*宽300 到 800*500 */
        /* 百分比指的是动画总时长的占比 */
       @keyframes change {
            0% {
                width: 200px;
            }
            50% {
                width: 500px;
                height: 300px;
            }
            100% {
                width: 800px;
                height: 500px;
            }
        }
        
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

动画属性:

目标:使用animation相关属性控制动画执行过程

注意: 动画名称和动画时长必须赋值 ;取值不分先后顺序 ; 如果有2个时间值,第一个时间表示动画时长,第二个时间表示延迟时间。

animation复合属性代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>animation复合属性</title>
    <style>
        .box {
            width: 200px;
            height: 100px;
            background-color: pink;
			
			/* animation: change 1s */
			
           /* animation: change 5s linear; */  /* linear匀速运动 */ 

            /* 分步动画 */
		   /* animation: change 1s steps(3) */ /* 分成3部分执行 */
            /* 3: 重复3次播放 */
         /* animation: change 1s steps(3) 1s 3; */

            /* 无限循环 ,带方向*/
            /* animation: change 1s infinite alternate; */

            /* 默认值, 动画停留在最初的状态 */
           /* animation: change 1s backwards; */
		   
		   /* 动画重复5次播放,带方向,停留在最初状态 */
		  /* animation: change 1s 5 alternate backwards; */

            /* 动画停留在结束状态 */
		/* 	animation: change 1s forwards; */
			
			/* 动画分3步,重复5次播放,带方向,停留在结束状态 */
			animation: change 1s steps(3) 1s 5 alternate forwards;
        }

        @keyframes change {
            from {
                width: 200px;
            }
            to {
                width: 600px;
            }
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

animation复合属性拆分写法代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>animation拆分写法</title>
    <style>
        .box {
            width: 200px;
            height: 100px;
            background-color: pink;

            animation-name: change;  /* 动画名称属性:animation-name */
            animation-duration: 1s;   /* 动画时长属性:animation-duration */
            animation-iteration-count: infinite;   /* 动画重复次数属性:animation-iteration-count */
            
        }

        .box:hover {
           /* 鼠标移入的时候暂停动画 */
           animation-play-state: paused;  /* 动画暂停的属性: animation-play-state */


        @keyframes change {
            from {
                width: 200px;
            }
            to {
                width: 600px;
            }
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

目标:使用steps实现逐帧动画 。

逐帧动画:帧动画。开发中,一般配合精灵图实现动画效果。

animation-timing-function: steps(N); 将动画过程等分成N份。

精灵动画制作步骤:

(1)准备显示区域: 设置盒子尺寸是一张小图的尺寸(图片的分辨率➗小图个数),背景图为当前精灵图。

(2)定义动画: 改变背景图的位置(移动的距离就是精灵图的宽度)。

(3)使用动画:添加速度曲线steps(N),N与精灵图上小图个数相同 ; 添加无限重复效果。

多组动画:

思考:如果想让小人跑远一些,该如何实现?

        答:精灵动画的同时添加盒子位移动画。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>精灵动画</title>
  <style>
    .box {
      /* 1.准备显示区域  1680/12=140 : 保证显示区域的尺寸和一个精灵小图的尺寸相同 */
      width: 140px;
      height: 140px;
      /* border: 1px solid #000; */
      background-image: url(./images/bg.png);

      /* 12: 精灵小图的个数 ,多个动画“,”号隔开*/
      animation: 
	   /* 逐帧动画 速度曲线steps(12) ,原地一直跑:infinite*/
        move 1s steps(12) infinite , 
		/* 小人 跑远一些 ,改变盒子的位置,停留在终点位置:forwards*/
        run 1s forwards
      ;
    }

	/* 	2. 定义动画 */
    @keyframes move { 
    /*   from {
          background-position: 0 0;
        }   */                        
        to {
          /* 1680: 整个精灵图的宽度 */
          background-position:  -1680px 0;
        }
    }

    /* 定义一个盒子移动的动画  800px */
    @keyframes run {
      /* 动画的开始状态和盒子的默认样式相同的, 可以省略开始状态的代码 */
     /* from {
        transform: translateX(0);
      } */
      to {
        transform: translateX(800px);
      }
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>

动画1

综合实例:

        综合实例—走马灯(无缝动画)代码:

<!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>
      * {
        padding: 0;
        margin: 0;
      }
      li {
        list-style: none;
      }

      img {
        width: 200px;
      }
      
      .box {
        width: 600px;
        height: 112px;
        border: 5px solid #000;
        margin: 100px auto;
        overflow: hidden; /* 溢出部分隐藏 */
      }

     .box ul {
        width: 2000px;   /* 10张图在一横排 */
		/* 一直走:infinite;匀速运动:linear */
        animation: move 6s infinite linear;
      }

    .box li {
        float: left;
      }

      /* 定义动画:位移, ul 左侧使用  x -1400  */
     @keyframes move {
		 
		from{
		  transform:translateX(0);
		 }
		 
        to {
          transform: translateX(-1400px);
        }
      }

     /* 用户鼠标移入box,动画暂停在ul上 */
     .box:hover ul {
        animation-play-state: paused;
      } 
      
    </style>
  </head>
  <body>
    <div class="box">
      <ul>
        <li><img src="./images/1.jpg" alt="" /></li>
        <li><img src="./images/2.jpg" alt="" /></li>
        <li><img src="./images/3.jpg" alt="" /></li>
        <li><img src="./images/4.jpg" alt="" /></li>
        <li><img src="./images/5.jpg" alt="" /></li>
        <li><img src="./images/6.jpg" alt="" /></li>
        <li><img src="./images/7.jpg" alt="" /></li>

        <!-- 无缝动画,第567移动的时候,显示区域不能留白,将起始的123张图替补做显示区域的填充 -->
        <li><img src="./images/1.jpg" alt="" /></li>
        <li><img src="./images/2.jpg" alt="" /></li>
        <li><img src="./images/3.jpg" alt="" /></li>
      </ul>
    </div>
  </body>
</html>

动画2

        综合实例—全民出游主页动画代码:

html:(缩放背景图  background-size)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
	<!-- 引入样式表 -->
    <link rel="stylesheet" href="./css/index.css">
</head>
<body>
    <!-- 云彩图片 作为背景-->
    <div class="cloud">
        <img src="./images/yun1.png" alt="">
        <img src="./images/yun2.png" alt="">
        <img src="./images/yun3.png" alt="">
		<img src="./images/san.png" alt="">
		<img src="./images/1.png" alt="">
 		<img src="./images/2.png" alt="">
		<img src="./images/3.png" alt="">
		<img src="./images/4.png" alt="">
		<img src="./images/font1.png" alt="">
		<img src="./images/lu.png" alt=""> 
    </div>
</body>
</html>

css:

* {
    margin: 0;
    padding: 0;
}

/* 修改html的高度跟浏览器一样高 */
html {
    height: 100%;
}

body {
    height: 100%;
	/* 背景图水平居中 center 无重复:no-repeat */
    background: url(./../images/f1_1.jpg) no-repeat center 0;
	

    /* 缩放背景图  background-size*/

    /* 图片等比例缩放, 当宽度或者高度和盒子尺寸相等, 图片就不再缩放了, 可能会留白*/
    /* background-size: contain; */

    /* 图片等比例缩放, 图片完全覆盖到整个盒子, 可能会导致图片显示不全 */
    background-size: cover;
}

/* 
1. img 引入图片, 控制位置
2. 定义动画,使用动画
*/

.cloud img {
    position: absolute;
    left: 50%;
    top: 0;
}

.cloud img:nth-child(1) {
    margin-left: -300px;
    top: 20px;
    animation: cloud 1s infinite alternate;
} 
	.cloud img:nth-child(2) {
    margin-left: 400px;
    top: 100px;
    animation: cloud 1s infinite alternate 0.2s;
} 
	.cloud img:nth-child(3) {
    margin-left: -550px;
    top: 200px;
    animation: cloud 1s infinite alternate 0.4s;
}

	.cloud img:nth-child(4){
		width: 50px;
		margin-left: -250px;
		top: 150px;
		animation: cloud 1s infinite alternate 0.2s;
		transform: translateY(-20px);
		transform: scale3D(1.5,1.5,1.5)
	}
	.cloud img:nth-child(5){
		width: 50px;
		margin-left: -227px;
		top: 430px;
		animation: cloud 1s infinite linear alternate 0.5s;	
		transform: translateY(-20px);
	}
	.cloud img:nth-child(6){
		width: 50px;
		margin-left: -47px;
		top: 430px;
		animation: cloud 1s infinite linear alternate 0.5s;	
		transform: translateY(-20px) ;
	}
	.cloud img:nth-child(7){
		width: 50px;
		margin-left: 117px;
		top: 430px;
		animation: cloud 1s infinite linear alternate 0.5s;	
		transform: translateY(-20px);
	}
	.cloud img:nth-child(8){
		width: 50px;
		margin-left: 257px;
		top: 430px;
		animation: cloud 1s infinite linear alternate 0.5s;	
		transform: translateY(-20px);
		
	}

	.cloud img:nth-child(9){
			width: 250px;
			margin-left:-150px;
			top: 200px;
			animation: cloud 1s infinite linear alternate 0.5s;	
			transform: translateY(-20px);
			transform: scale3D(1.5,1.5,1.5)
		}
		.cloud img:nth-child(10){
				width: 90px;
				margin-left:50px;
				top: 80px;
				
			}
		.cloud:hover img:nth-child(9){
			animation-play-state: paused;
		}	
		
/* 云彩动画 */
@keyframes cloud {
    to {
        transform: translateX(20px);
    }
}

效果图:

动画3

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6553.html
标签
css动画
评论
发布的文章

什么是JSON 为什么使用它

2024-05-07 13:05:36

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!