代码
提交代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动画实战</title>
<style>
/* 清除浏览器默认边距 */
* { padding: 0; margin: 0; }
body {
/* 这段代码是为了居中显示,不是重点,看不懂的话可以无视 */
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
/* 添加背景图 */
background: url(http://img.mukewang.com/wiki/5eda029f08f198f513660768.jpg) center / cover;
}
.animate {
width: 130px;
height: 130px;
background: url(http://img.mukewang.com/wiki/5eda0279091a541906500260.jpg);
/* 动画: 动画名(loading) 时长(0.6秒) 运行方式(step-end) 动画次数(3次) 填充模式(双向) */
animation: loading .6s step-end 3 both, /* 动画可以定义多个,每个动画用逗号分隔。*/
/* 第二个动画的动画名(animate) 时长(0.8秒) 运行方式(step-end) 延时(1.8秒) 动画次数(无限) */
animate .8s steps(12) 1.8s infinite;
}
/* 定义动画:动画名(loading) */
@keyframes loading {
from { background-position: 0 0 } /* 第一个数字代表x轴坐标,第二个数字代表y轴坐标 */
10% { background-position: -130px 0 } /* x坐标:-130 y坐标:0 */
20% { background-position: -260px 0 } /* x坐标:-260 y坐标:0 */
30% { background-position: -390px 0 } /* x坐标:-390 y坐标:0 */
40% { background-position: -520px 0 } /* x坐标:-520 y坐标:0 */
50% { background-position: 0 -130px } /* x坐标:0 y坐标:-130 */
60% { background-position: -130px -130px } /* x坐标:-130 y坐标:-130 */
70% { background-position: -260px -130px } /* x坐标:-260 y坐标:-130 */
80% { background-position: -390px -130px } /* x坐标:-390 y坐标:-130 */
90% { background-position: -520px -130px } /* x坐标:-520 y坐标:-130 */
/* 修改最后一帧,以便动画结束后盒子就应用最后一帧的样式 */
to {
/* 下一个动画的宽高 */
width: 108px;
height: 150px;
/* 下一个动画的雪碧图 */
background-image: url(http://img.mukewang.com/wiki/5ed9b321092b587026000300.jpg);
/* 雪碧图的最短边(这里是高)刚好能够覆盖住盒子 */
background-size: cover;
}
}
/* 定义动画:动画名(animate) */
@keyframes animate {
from { background-position: 0 }
to { background-position: -1300px }
}
</style>
</head>
<body>
<div class="animate"></div>
</body>
</html>
运行结果