10月的深圳还是那么DE热(30度+),十一长假,出去浪几天晒糊了,黑了一圈。
假后的第一天上班,整个人迷糊迷糊的,也没事情干,分享点东西吧,现做的一个CSS3雨天雷电动画效果,还是"热"的,请拿走,不谢。
思维
每次做动画之前,我们都必须了解动画的帧数,脑子里有自己的思路,然后跟设计师沟通,提取一些动画元素。
比如这次我需要做2个元素的雷电动画,并且是交叉进行,模拟现实中的效果。
我们先来处理第一个,后面一个就很简单了。
实现思路:
1、第一帧:雷电图的高度为0,设置50%透明度
2、然后就是显示出图,即高度变成图片的高度
3、第三步很关键,现实中的雷电效果就是劈下来,会闪动几下,所以我们需要设置几帧来实现闪动效果,我这里设置了几个断点。比如在8%、12%, 16%处设置为50%透明度
,在10%,14%处设置透明度为1。这块挺折腾的,大家可以根据情况去调节闪动速度,我提供的仅供参考。
4、雷电逐渐消失,于是我在50%处设置透明图为0,100%处设置高度为图片的高度,透明度也为0,即雷电停止逐渐消失。
5、有人问了,闪动的区间那么小?因为雷电的速度是很快的,所以设置的时间段很短的。
演示
了解完实现思路,就简单了,接下来我们就考验你的技术了,实战开始,这里就不啰嗦,直接上代码,相信大家根据上面讲的,然后对照下很容易理解的哟。
HTML代码:
<div class="banner">
<div class="lightning">
<div class="lightning1"><img src="https://www.jiangweishan.com/demo/lightning1.png"></div>
<div class="lightning2"><img src="https://www.jiangweishan.com/demo/lightning2.png"></div>
</div>
</div>
核心CSS代码:
@keyframes flash_light {
0% {
height: 0px;
opacity: 0.5;
}
7.5% {
height: 320px;
}
8%, 12%, 16% {
opacity: 0.5;
}
10%, 14% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
height: 320px;
opacity: 0;
}
}
.lightning div img {
display: block;
margin: auto;
width: 100%;
}
.lightning .lightning1 {
position: absolute;
right: 70%;
animation: flash_light 5.7s infinite;
}
.lightning .lightning2 {
position: absolute;
left: 70%;
animation: flash_light 5.1s infinite;
animation-delay: -2.33s;
}
因为有两道闪电,实现了第一道闪电,第二道闪电调用同一个动画方法,只要做一个延时特效就可以了,我设置延时2.33s播放。
其实你还可以实现更多的闪电效果,核心方法已经分享给大家了,自己去扩展吧。最后还是要把整个DEMO的代码贴出来。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>雷电效果-Web前端之家</title>
<style type="text/css">
body{background:#000;}
.lightning {
position: absolute;
z-index: 1;
top: 0;
width: 100%;
}
.lightning div {
position: absolute;
overflow: hidden;
}
@keyframes flash_light {
0% {
height: 0px;
opacity: 0.5;
}
7.5% {
height: 320px;
}
8%, 12%, 16% {
opacity: 0.5;
}
10%, 14% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
height: 320px;
opacity: 0;
}
}
.lightning div img {
display: block;
margin: auto;
width: 100%;
}
.lightning .lightning1 {
position: absolute;
right: 70%;
animation: flash_light 5.7s infinite;
}
.lightning .lightning2 {
position: absolute;
left: 70%;
animation: flash_light 5.1s infinite;
animation-delay: -2.33s;
}
</style>
</head>
<body>
<div class="banner">
<div class="lightning">
<div class="lightning1"><img src="https://www.jiangweishan.com/demo/lightning1.png"></div>
<div class="lightning2"><img src="https://www.jiangweishan.com/demo/lightning2.png"></div>
</div>
</div>
</body>
</html>
大家可以预览下,是不是很吊呢。
总结
只有想不到,没有做不到;有些效果实现起来,并没有我们想象的那么复杂,如果你能静下心来认真去分析,肯定能实现,难道不是吗?