canvas流星月亮星星银河
这是页面的特效,首先月亮直接出现,然后星星和银河渐渐的出现(一闪一闪),最后流星划过,留下完美的句点。

所有的动画都是通过帧来实现的。
星星的代码分为2部分,首先是随机生成星星,然后是绘制星星,最后是星星的帧动画。
随机生成星星代码:
function newStar(num,width,height) {
var stars = [];
/// 恒星
for(var i = 0; i < num; i++) {
var x = Math.round(Math.random() * width);
var y = Math.round(Math.random() * height);
//避开月亮
if(y > 100 && y <400) {
if(x > width - 300 && x < width -250) {
x = x - 100;
} else if(x > width - 250 && x < width -200) {
x = x + 100;
}
}
var star = {
x: x,
y: y,
r:Math.round(Math.random()*4),
alpha:0,//Math.random(),
valpha:(Math.random()/70)*(Math.random() > .5 ? -1 : 1),//随机+- 星星透明度改变加速度
}
stars.push(star);
}
return stars;
}
然后是如何绘制星星:
function drawStar(cxt, x, y, r, alpha) {
cxt.beginPath();
var draw = cxt.createRadialGradient(x, y, 0, x, y, r);
// x0 渐变的开始圆的 x 坐标
// y0 渐变的开始圆的 y 坐标
// r0 开始圆的半径
// x1 渐变的结束圆的 x 坐标
// y1 渐变的结束圆的 y 坐标
// r1 结束圆的半径
draw.addColorStop(0,'rgba(255,255,255,'+ alpha +')');
draw.addColorStop(1,'rgba(255,255,255,0)');
cxt.fillStyle = draw;
cxt.arc(x, y, r, 0, Math.PI*2, true);
// x 圆的中心的 x 坐标。
// y 圆的中心的 y 坐标。
// r 圆的半径。
// sAngle 起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)。
// eAngle 结束角,以弧度计。
// counterclockwise 可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。
cxt.fill();
cxt.closePath();
}
最后是动画(这部分比较简单)
cxt.clearRect(0,0,w,h);//清空画布 ////绘制星星
// console.log(self.stars)
for(var i = 0; i < num; i++) {
drawStar(cxt, stars[i].x, stars[i].y, stars[i].r, stars[i].alpha); ///改变星星亮度
if(stars[i].alpha < 0 || stars[i].alpha > 1) {
stars[i].valpha = stars[i].valpha * -1;
} stars[i].alpha += stars[i].valpha; }
接下来说的是月亮,月亮比较简单,就是画一个圆形,一个渐变的背景。
function drawMoon(cxt, w, h) {
var moon = cxt.createRadialGradient(w - 300, 200, 17.5, w - 300, 200, 150);
//径向渐变
moon.addColorStop(0, 'rgba(255,255,255,.9)');
moon.addColorStop(0.01, 'rgba(70,70,80,.9)');
moon.addColorStop(0.2, 'rgba(40,40,50,.95)');
moon.addColorStop(0.4, 'rgba(20,20,30,.8)');
moon.addColorStop(1, 'rgba(0,0,10,0)');
cxt.beginPath();
cxt.save()
cxt.fillStyle = moon;
cxt.fillRect(0, 0, w, h);
cxt.restore();
cxt.fill();
cxt.closePath();
}
让然后是流星
流星的生成比较简单就是比星星多了一个随机的速度。
流星的绘画就是一个半圆+渐变的超长三角形
function drawlineStar(cxt, x, y, r, len) {
///半圆
cxt.beginPath();
var draw = cxt.createRadialGradient(x, y, 0, x, y, r);
draw.addColorStop(0,'rgba(255,255,255,1)');
draw.addColorStop(1,'rgba(255,255,255,0)');
cxt.fillStyle = draw;
cxt.arc(x, y, 1, Math.PI / 4, 5 * Math.PI / 4);
cxt.fill();
cxt.closePath();
///三角形
cxt.beginPath();
var tra = cxt.createLinearGradient(x - len, y - len, x, y);
tra.addColorStop(0, 'rgba(0,0,0,0)');
tra.addColorStop(1, 'rgba(255,255,255,1)');
cxt.strokeStyle = tra;
cxt.moveTo(x, y);
cxt.lineTo(x - len, y - len);
cxt.fill();
cxt.stroke();
cxt.closePath();
}
大概就这样子,细节就自己研究吧!!!!
有活要干~~~
See the Pen Moon by to_Matthew (@to_Matthew) on CodePen.
<----------------------其实下一步是准备做,canvas和鼠标之间的交互-------------------------->
先做一下自我提示,点击事件
canvas.onxxx,等到当前的屏幕的clickX,Y。用canvas.getBoundingClientRect() (x:x-canvas.getBoundingClientRect().left , y:y-canvas.getBoundingClientRect().top)
得到相对canvas的X,Y值。
然后可以比较canvas点的数据X,Y值。
然后就是做相应的交互啦~~~~~
canvas流星月亮星星银河的更多相关文章
- 给页面添加Canvas鼠标光标星星跟随动画特效
素材来源:https://www.lanrenzhijia.com/others/5024.html 简单说下我自己的步骤: 把<script type="text/javascrip ...
- html5 js canvas中画星星的函数
function drawStar(cxt, x, y, outerR, innerR, rot) { cxt.beginPath(); ; i < ; i++) { cxt.lineTo(Ma ...
- spark处理大规模语料库统计词汇
最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...
- python 的基础 学习 第五天 基础数据类型的操作方法
1,列表的基本操作方法 1,列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: ...
- 一致性hash的实现
原文:https://blog.csdn.net/u011305680/article/details/79721030 1.不带虚拟节点的 package hash; import java.uti ...
- 一致性hash算法及java实现
一致性hash算法是分布式中一个常用且好用的分片算法.或者数据库分库分表算法.现在的互联网服务架构中,为避免单点故障.提升处理效率.横向扩展等原因,分布式系统已经成为了居家旅行必备的部署模式,所以也产 ...
- canvas绘制星星和月亮
用变量的方式绘制一个五角星,首先求五角星十个顶点的坐标. 可以把每个五角星看成外顶点用一个大圆绘制,内顶点用小圆绘制.在坐标系(0deg)下,根据每个顶点的角度和圆的半径求得x,y. 而每个大顶点相差 ...
- canvas画随机闪烁的星星
canvas画一颗星星: 规则的星星有内切圆和外切圆,每两个点之间的角度是固定的,因此可得到星星的每个点的坐标,画出星星. function drawStars(x,y,radius1,radius2 ...
- 星星闪烁+多边形移动 canvas
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- SVG颜色、渐变和填充
颜色 RGB和HSL都是CSS3支持的颜色表示方法,一般普遍使用是RGB.PS:HSL浏览器兼容. RGB RGB即是代表红.绿.蓝三个通道的颜色,通过对红(R).绿(G).蓝(B)三个颜色通道的变化 ...
- windows 7 + virtualbox安装centos+mono+jexus
1. 下载安装virtualbox和virtualbox extension 2. 创建并安装centos虚拟机 3. 下载并安装libgdiplus,gdi+库 4. 下载并安装Mono 5. 下载 ...
- KeySpaceNotification 键空间通知
KeySpaceNotification 键空间通知 1.Redis键淘汰机制简介 在Redis中,内存的大小是有限的,所以为了防止内存饱和,需要实现某种键淘汰策略.主要有两种方法,一种是当Redis ...
- JavaScript线程机制
浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:JS引擎线程(用于处理JS).GUI渲染线程(用于页面渲染).浏览器事件触发线程(用于控制交互). 除此之外 ...
- 鹏程网用户管理系统学习(2016-07-18 by 徐鹏)
新的平台:X平台(x.hna.net)旧的平台:鹏程网(www.hna.net) 如今的平台情况:很多业务已经转到X平台,但也存在少量的业务还是用鹏程网的旧系统.例如**用户管理系统(也逐渐转移到易服 ...
- SSDB图形界面管理工具:phpssdbadmin安装部署
环境: 14.04.1-Ubuntu 1.安装Nginx apt-get install nginx ubantu安装完Nginx后,文件结构大致为: 所有的配置文件都在 /etc/nginx下: 启 ...
- Scala初入
何为Scala物 Scala为基于JVM虚拟机中的面向对象与函数式编程思想并且完全兼容Java的混合编程语言,可以是Scala与Java是同根同源的,既然Scala与JAVA都是基于JVM之上的编程语 ...
- [python]set集合学习
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...
- .net core ClaimsPrincipal Class
hClaimsPrincipal Class ttps://msdn.microsoft.com/en-us/library/system.identitymodel.services.claimsp ...
- 在Ubuntu Server 14.04中搭建FTP服务器(VMWare)
自己搭建ftp服务器,方便主机与虚拟机中的Ubuntu传输文件. 选用的ftp软件为vsftpd. 1.命令行: sudo apt-get install vsftpd 2.安装完配置: vsftpd ...