canvas画一颗星星:

规则的星星有内切圆和外切圆,每两个点之间的角度是固定的,因此可得到星星的每个点的坐标,画出星星。

  function drawStars(x,y,radius1,radius2,num,drawType,color){
var angle = 360/(num*2);
var arr = [];
for(var i=0;i<num*2;i++){
var starObj = {};
if(i%2==0){
starObj.x = x+radius1*Math.cos(i*angle*Math.PI/180);
starObj.y = y+radius1*Math.sin(i*angle*Math.PI/180);
}else{
starObj.x = x+radius2*Math.cos(i*angle*Math.PI/180);
starObj.y = y+radius2*Math.sin(i*angle*Math.PI/180);
}
arr.push(starObj);
} cxt.beginPath();
cxt.fillStyle=color;
cxt.strokeStyle = color;
cxt.moveTo(arr[0].x,arr[0].y);
for(var i=1;i<arr.length;i++){
cxt.lineTo(arr[i].x,arr[i].y);
}
cxt.closePath();
if(drawType=="fill"){
cxt.fill();
}else{
cxt.stroke();
}
}

给星星添加随机属性:

 var starArr=[];                           //多个星星对象
for(var i=0;i<5;i++){
var starObj={
radius1:10+5*Math.random(),
radius2:2+4*Math.random(),
x:30+(canvas.width-60)*Math.random(),
y:30+(canvas.height-60)*Math.random(),
num:4,
angle:360*Math.random(),
changeAngle:-5+10*Math.random(),
color:"rgb("+parseInt(255*Math.random())+","+parseInt(255*Math.random())+","+parseInt(255*Math.random())+")"
}
starArr.push(starObj);
}

随机产生星星并添加动画(闪烁、旋转等):

 setInterval(function(){
cxt.clearRect(0,0,500,500);
for(var i=0;i<starArr.length;i++) {
starArr[i].angle+=starArr[i].changeAngle;
cxt.save();
cxt.beginPath();
cxt.translate(starArr[i].x, starArr[i].y);
cxt.rotate(starArr[i].angle * Math.PI / 180);
cxt.scale(Math.sin(starArr[i].angle * Math.PI / 180), Math.sin(starArr[i].angle * Math.PI / 180));
cxt.globalAlpha = Math.abs(Math.sin(starArr[i].angle * Math.PI / 180));
drawStars(0,0,starArr[i].radius1, starArr[i].radius2, starArr[i].num, "fill", "white");
cxt.restore();
}
},30);

到此,随机产生有动画的星星就完了。

下面还补充点,当我在angular中使用canvas画星星时,我的做法时window.onload=function(canvas()),FF等均正常,在IE9中报错,canvas.getContext('2d')为null,不知道是什么原因,我在directive中用canvas,canvas.getContext('2d')不为null,但是没法画出星星,没找到原因,最后曲线救国。。在canvas下加了个隐藏的图片,图片的onload执行canvas(),够曲折的方法,如果有更好的方法或是知道原因的,欢迎留言提供,不甚感激。

canvas画随机闪烁的星星的更多相关文章

  1. canvas画随机的四位验证码

    效果图如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. js+canvas画随机4位验证码

    啥都不说了,复制代码吧!!! <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  3. 使用javascript和canvas画月半弯

    使用javascript和canvas画月半弯,月半弯好浪漫!浏览器须支持html5 查看效果:http://keleyi.com/a/bjad/8xqdm0r2.htm 以下是代码: <!do ...

  4. 樱花的季节,教大家用canvas画出飞舞的樱花树

    又到了樱花的季节,教大家使用canvas画出飞舞的樱花树效果. 废话少说,先看效果. 演示效果地址:http://suohb.com/work/tree4.htm 查看演示效果 第一步,我们先画出一棵 ...

  5. 撩妹技能 get,教你用 canvas 画一场流星雨

    开始 妹子都喜欢流星,如果她说不喜欢,那她一定是一个假妹子. 现在就一起来做一场流星雨,用程序员的野路子浪漫一下. 要画一场流星雨,首先,自然我们要会画一颗流星. 玩过 canvas 的同学,你画圆画 ...

  6. canvas 画圈 demo

    html代码: <canvas id="clickCanvas2"  width="180" height="180" data-to ...

  7. 踩个猴尾不容易啊 Canvas画个猴子

    踩个猴尾不容易啊  Canvas画个猴子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  8. canvas画时钟

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. Canvas画椭圆的方法

    虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生   oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...

随机推荐

  1. sql datetime操作

    Sql Server中的日期与时间函数 SQL中的时间函数非常有用,特别是在我们进行初始赋值.复杂查询的时候,就显得特别方便. 1.获得系统当前时间 select getdate()  2.DateN ...

  2. 黑马程序员:Java编程_异常

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 异常即对问题的描述,将问题进行对象的封装. 1. 异常体系:Throwable ...

  3. magento中如何实现产品图片放大效果

    Magento列表页用jQuery实现产品图片放大效果今天看到个网站,鼠标移到列表页的产品图片上,旁边会弹出一个大图,感觉不错,就自己在Magento里写了个.先看看效果 这个效果比较好实现,打开li ...

  4. Ubuntu安装gfortran

    命令行运行 sudo apt-get install gfortran

  5. xmimd的第十天笔记

  6. 【学习笔记】Oracle-1.安装及配置

    Win7旗舰版安装Oracle_11gR1_database:  http://my.oschina.net/laiwanshan/blog/89951 Oracle用户登陆 sqlplus sys/ ...

  7. 多媒体视频(video)

    <video> 是 HTML 5 中的新标签.<video> 标签的作用是在 HTML 页面中嵌入视频元素.<video> 标签定义视频,比如电影片段或其他视频流. ...

  8. 在笔记本电脑开通无线WIFI

    1.Windows + R启动运行,输入services.msc进入服务 2.在服务中将Security Center服务从自动启动转为禁止启动 3.在服务中将Windows Firewall的启动类 ...

  9. Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中

    一.开启MyS远程访问功能 1.进入服务器输入netstat -an | grep 3306确认3306是否对外开放,MySQL默认状态下是不对外开放访问功能的.输入以上命令之后如果端口没有被开放就会 ...

  10. 【Unity3D自学记录】判断物体是否在镜头内

    判断物体是否在镜头内. 其实很简单的方法 代码如下: using UnityEngine; using System.Collections; public class DJH_IsRendering ...