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> ...
随机推荐
- cookie入门
据我对cookie诞生背景的了解,cookie是由网景公司创建的,目的就是将用户的数据储存在客户端上.伴随的HTML5的出现,现在又有另外一个解决数据离线储存的方案,就是HTML5中的Web stor ...
- [转]通过Visual Studio为Linux编写C++代码
Build 2016大会上Microsoft首次公布的Visual Studio 2015扩展提供了在VS2015中编写C++代码,随后通过Linux/UNIX计算机进行编译和执行的能力.这种想法非常 ...
- NSDateFormatter 时间格式转换
NSString *strDate = @“Wed Apr ::”; NSDateFormatter *dateFomatter =[[NSDateFormatter alloc] init]; [d ...
- 利用NetworkExtension库配置VPN
VPN简单说就是连接局域网的一个通道.Ios8之后苹果增加了一个VPN的接口NEVPNManager,它可以方便的添加VPN连接. 首先在你的Xcode内,TARGETS->Capabiliti ...
- 对iOS10新增Api的详细探究
本文主要是一些对iOS新功能的探索,之前发现博客里关于iOS新功能的分析大多是过于概括,每个功能几句话,无法了解到具体的功能.所以本次的探索是基于Api层面,着重看一些具体用法所做的笔记,本来想分别画 ...
- 看完你也能独立负责项目!产品经理做APP从头到尾的所有工作流程详解!
(一)项目启动前 从事产品的工作一年多,但自己一直苦于这样或者那样的困惑,很多人想要从事产品,或者老板自己创业要亲自承担产品一职,但他们对产品这个岗位的认识却不明晰,有的以为是纯粹的画原型,有的是以为 ...
- H5 表格的结构
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- jsonp跨域请求
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- win7的6个网络命令
1 名称: Ipconfig 参数: /all : 显示详细信息 /renew: 更新所有适配器 /renew EL*:更新所有名称以EL为开头的连接 /release *Con*: 释放所有匹配的连 ...
- ASP.NET MVC 让@Html.DropDownList显示默认值
在使用@Html.DropDownList的过程中,发现它的用法很局限,比如在加载的时候显示设定的默认项或者调整它的显示样式,在网上查了一些资料,终于把这个问题解决了. 一.View代码 @using ...