用 CSS3 做一个流星雨动画
昨天 UI 提交过来一个登录页的设计稿,要求背景有一个流星雨动画,做完之后觉得挺有趣,分享一下~

一、流星动画
首先创建一个 div 作为画布
<div id="stars">
<div class="star" style="top: 0px;left: 500px;"></div>
</div>
html, body {
width: 100%;
height: 100%;
margin:;
overflow: hidden;
background: linear-gradient(rgba(0, 108, 172, 1), rgba(0, 122, 195, .7));
}
#stars {
margin: 0 auto;
max-width: 1600px;
position: fixed;
top:;
left:;
right:;
bottom:;
z-index:;
}
为了防止浏览器分辨率太大而影响视觉效果,给画布加了 max-width 和 margin:auto
然后画出流星的形状
.star {
display: block;
width: 1px;
background: transparent;
position: relative;
opacity:;
/*过渡动画*/
animation: star-fall 3s linear infinite;
-webkit-animation: star-fall 3s linear infinite;
-moz-animation: star-fall 3s linear infinite;
}
.star:after {
content: '';
display: block;
border: 0px solid #fff;
border-width: 0px 90px 2px 90px;
border-color: transparent transparent transparent rgba(255, 255, 255, .5);
box-shadow: 0 0 1px 0 rgba(255, 255, 255, .1);
/*变形*/
transform: rotate(-45deg) translate3d(1px, 3px, 0);
-webkit-transform: rotate(-45deg) translate3d(1px, 3px, 0);
-moz-transform: rotate(-45deg) translate3d(1px, 3px, 0);
transform-origin: 0% 100%;
-webkit-transform-origin: 0% 100%;
-moz-transform-origin: 0% 100%;
}
创建动画,实现流星划过、渐入渐隐的效果
@keyframes star-fall {
0% {
opacity:;
transform: scale(0.5) translate3d(0, 0, 0);
-webkit-transform: scale(0.5) translate3d(0, 0, 0);
-moz-transform: scale(0.5) translate3d(0, 0, 0);
}
50% {
opacity:;
transform: translate3d(-200px, 200px, 0);
-webkit-transform: translate3d(-200px, 200px, 0);
-moz-transform: translate3d(-200px, 200px, 0);
}
100% {
opacity:;
transform: scale(1.2) translate3d(-300px, 300px, 0);
-webkit-transform: scale(1.2) translate3d(-300px, 300px, 0);
-moz-transform: scale(1.2) translate3d(-300px, 300px, 0);
}
}
在50%的节点上,我没有加上 scale(1) 这条属性
是因为加上之后,动画进行到 50% 的时候,会有一个很明显的停顿
删掉 scale(1) 能改善这个情况,但并没有解决
而且当 animation-timing-function 设置为 linear 之外的属性的时候,问题特别严重
如果有朋友知道这个问题的原因,一定要留言告诉我,并收下我的膝盖~
二、形成流星雨
上面只是创建了一个流星,如果要形成流星雨,还需要继续
<div id="stars"></div>
var stars = document.getElementById('stars')
// js随机生成流星
for (var j=;j<;j++) {
var newStar = document.createElement("div")
newStar.className = "star"
newStar.style.top = randomDistance(, -) + 'px'
newStar.style.left = randomDistance(, ) + 'px'
stars.appendChild(newStar)
}
// 封装随机数方法
function randomDistance (max, min) {
var distance = Math.floor(Math.random() * (max - min + ) + min)
return distance
}
通过 js 动态生成流星,保证 left 和 top 的值在某一范围内随机,就能产生较好的效果
然后用 js 添加动画延时,让流星不会同时出现
var star = document.getElementsByClassName('star')
// 给流星添加动画延时
for (var i = 0, len = star.length; i < len; i++)
{
star[i].style.animationDelay = i % 6 == 0 ? '0s' : i * 0.8 + 's'
}
为了防止一开始只有一个流星的尴尬场面,我将 index 为 6 的倍数的流星设为一开始就出现
然后流星雨的动画就完成了,可以点击这里查看在线示例
用 CSS3 做一个流星雨动画的更多相关文章
- 用css3做一个求婚小动画
概述 本案例主要是运用到了css3的animation.keyframes.transform等属性,熟悉了,就可以做更多的其他动画效果,这几个属性功能非常强大. 详细 代码下载:http://www ...
- 用js+css3做一个小球投篮的动画(easing)
<!DOCTYPE html> <html> <head> <script src="jquery-1.11.3.min.js">& ...
- 使用纯CSS3实现一个日食动画
日食现象是月亮挡在了地球和太阳之间,也就是月亮遮挡住了太阳. 所以要构造日食,我们须要2个对象:一个代表月亮,一个代表太阳. <div class="eclipse sun" ...
- 用css3做一个正方体
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 做一个APP
前言 有点零乱,但是我想写下来慢慢整理,搭建一个好点的工程-模式MVC, 会包括一些第三方库,动画库,第三方库管理关联,自定义常用控件的管理和关联 1.预编译文件的创建 在build setting ...
- 用CSS3的transform来做一个立方体
有一次上数据结构课老师布置了一个用队列的思想通过js和Html来做一个“跳舞配对”的网页,当时那个跳舞的部分用了css3里面transform的相关属性做了个个让图片无限翻转的效果,可能正是由于这个效 ...
- 用js,css3 做的一个球
用css3属性很容易做一个立方体,但是要做一个球体,会相对复杂些 原理是:球可以看做是由无数个圆圈构成,然后就可以用圆圈来做球, 下面的例子是我做的一个小球,由72个圆圈组成.如果把每个圆圈的背景颜色 ...
- 手把手带你做一个超炫酷loading成功动画view Android自定义view
写在前面: 本篇可能是手把手自定义view系列最后一篇了,实际上我也是一周前才开始真正接触自定义view,通过这一周的练习,基本上已经熟练自定义view,能够应对一般的view需要,那么就以本篇来结尾 ...
- [Material Design] 教你做一个Material风格、动画的button(MaterialButton)
原创作品,转载请注明出处:http://blog.csdn.net/qiujuer/article/details/39831451 前段时间Android L 公布了,相信看过公布会了解过的朋友都为 ...
随机推荐
- NNSZ OIers' Blog Archive
HWL:ssttkkl ,已经搬家到这个地址 NINGLONG:NINGLONG 愤鸟先飞: FNXF Syhien:13355936 ,已经搬家到这个地址 IDE:ThetaS TFW:TFX‘s ...
- Bzoj 4950
Description 那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙.Patrick在编程竞赛上豪赌输掉了一大笔钱,所以他需要再干一票.为此他需要你的帮助 ...
- 我的第一个python web开发框架(18)——前台页面与接口整合
由于我们前后台系统没有分开,所以前台页面调用接口时,可以直接使用后台管理系统已经完成的接口,不过后台管理系统接口的访问加上了登录验证,所以需要将前台要用到的接口进行处理,让它们设置到白名单当中 我们打 ...
- Android 防内存泄露handler
Android 防内存泄露handler 1.使用弱引用 WeakRefHander /** * 作者: allen on 15/11/24.感谢开源作者https://coding.net/u/co ...
- HDU 1715 大菲波数
/* 中文题意: 中文翻译: 题目大意:求1000以内的菲波数. 解题思路:用大数来计算.用二维数组来存数. 难点具体解释:用二维数组存数,開始的一维存的是1000个Pi,后面那一维是用来存数字的. ...
- nat的翻译类型(3)--端口地址转换
目的:在1.1 1.2 1.3 三台内网的服务器访问外网的服务器(202.1.1.2)时,将内网ip转换为外网ip. 1.设置内网三台服务器的Ip ,网关,以及外网服务器的ip网关 分别为:192.1 ...
- Order笔记-项目导入
问题: @Override报错: @Override注释在jdk1.5环境下只能用于对继承的父类的方法的重写,但不能用于对实现的接口中的方法的实现.(也就是jdk1.5的 @Override这个ann ...
- DB主从一致性架构优化4种方法
需求缘起 大部分互联网的业务都是"读多写少"的场景,数据库层面,读性能往往成为瓶颈.如下图:业界通常采用"一主多从,读写分离,冗余多个读库"的数据库架构来提升数 ...
- Springboot-添加对jsp支持
1,在项目的配置文件加入以下依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId>j ...
- 36、IO模型与socketserver实现并发
特别声明本随笔copy于egon(林海峰). 一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronou ...