用 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 公布了,相信看过公布会了解过的朋友都为 ...
随机推荐
- BFS求最短路 Abbottt's Revenge UVa 816
本题的题意是输入起点,朝向和终点,求一条最短路径(多解时任意输出一个即可) 本题的主要代码是bfs求解,就是以下代码中的slove的主要部分,通过起点按照路径的长度来寻找最短路径,输出最先到终点的一系 ...
- linux crontab yum安装
crontab工具来做计划任务,定时任务,执行某个脚本等等 1.检查是否已安装crontab # crontab -bash: crontab: command not found 执行 cronta ...
- LeetCode90:Subsets II
Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...
- Android酷炫有用的开源框架
一.代码库 1.from 代码家 整理比較好的源代码连接 一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSher ...
- Bootstrap入门Demo——制作路径导航栏
今天在在群里聊天的时候看到一仅仅程序猿发了一张用Bootstrap做的界面.感觉挺好看.然后去官网看了下组件.发现都挺美丽的,然后看到了路径导航栏,刚好要做这个东西,然后就下了Bootstrap的源代 ...
- JAVA入门[17]-ControllerAdvice处理exception
1.关于@ControllerAdvice @ControllerAdvice注解本身已经使用了@Component,因此@ControllerAdvice注解所标注的类将会自动被组件扫描获取到,就像 ...
- 用node.js实现mvc相册资源管理器
摘要:通过前两天的学习我大概学了了,用formidable模块文件上传,express框架,以及利用fs模块进行文件读取,今天我学习了如何用这些知识来制作相册,暂没有数据库,所以做的也是本地的资源管理 ...
- 项目管理: Alpha,Beta,RC,GA,Release
Alpha: Alpha是内部测试版,一般不向外部发布.也可以认为是演示版本.允许存在一定的问题(例如功能组合.异常流程处理.稳定性.性能存在部分问题) ...
- 利用AndroidStudio开发java工程
1.新建一个project,或者如果你已经有project的话,那就直接新建一个module.注意选择Java library,然后下一步. 2.输入module的一些信息.点击finish.(在创建 ...
- CoreJava逻辑思维-顺时针打印自定义矩阵
CoreJava逻辑思维-顺时针打印自定义矩阵 这两天回顾了一下刚入Java时的一些比较有意思的逻辑题,曾经也费劲脑汁的思考过的一些问题,比如百钱百鸡最简单的算法啦之类的,而今天博主想说的是一个循环打 ...