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>
大家可以预览下,是不是很吊呢。
总结
只有想不到,没有做不到;有些效果实现起来,并没有我们想象的那么复杂,如果你能静下心来认真去分析,肯定能实现,难道不是吗?