canvas画随机闪烁的星星
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画随机闪烁的星星的更多相关文章
- canvas画随机的四位验证码
效果图如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- js+canvas画随机4位验证码
啥都不说了,复制代码吧!!! <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- 使用javascript和canvas画月半弯
使用javascript和canvas画月半弯,月半弯好浪漫!浏览器须支持html5 查看效果:http://keleyi.com/a/bjad/8xqdm0r2.htm 以下是代码: <!do ...
- 樱花的季节,教大家用canvas画出飞舞的樱花树
又到了樱花的季节,教大家使用canvas画出飞舞的樱花树效果. 废话少说,先看效果. 演示效果地址:http://suohb.com/work/tree4.htm 查看演示效果 第一步,我们先画出一棵 ...
- 撩妹技能 get,教你用 canvas 画一场流星雨
开始 妹子都喜欢流星,如果她说不喜欢,那她一定是一个假妹子. 现在就一起来做一场流星雨,用程序员的野路子浪漫一下. 要画一场流星雨,首先,自然我们要会画一颗流星. 玩过 canvas 的同学,你画圆画 ...
- canvas 画圈 demo
html代码: <canvas id="clickCanvas2" width="180" height="180" data-to ...
- 踩个猴尾不容易啊 Canvas画个猴子
踩个猴尾不容易啊 Canvas画个猴子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...
- canvas画时钟
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Canvas画椭圆的方法
虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生 oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...
随机推荐
- C语言获得数组长度的函数
<转自百度知道> 1.c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数). 例如: int data[4]; int length; length=sizeof(d ...
- 【three.js详解之二】渲染器篇
[three.js详解之二]渲染器篇 本篇文章将详细讲解three.js中渲染器(renderer)的设置方法. three.js文档中渲染器的分支如下: Renderers CanvasRend ...
- nginx+gunicorn+supervisor+flask @ centos
/etc/nginx/conf.d/default.conf server { listen 80 default_server; server_name 127.0.0.1; #charset ko ...
- 初试微信小程序
2016年11月3日,微信小程序终于公测了,大家可以正式开发了.早在这之前,应公司要求,和同事就早早的试了一下微信小程序的开发,特此记录一下: 微信官方小程序文档:https://mp.weixin. ...
- solr异常解决
使用solr1.4跟solr3.1时,配置了个唯一id类型是sint 或者int,启动时在tomcat后台就会抛出这个异常: org.apache.solr.common.SolrException: ...
- xmind的第九天笔记
- 关于配置服务器(IIS7)
服务器Server2003 ,无限开机动画慢动作重播,一怒而重装server2008 然,重点就是系统装好了 IIS装好了 ,发布网站 开始各种错了!!! 1.第一个错 额,错误信息说 :由于权限不足 ...
- JAVA中精确计算金额BigDecimal
package com.chauvet.utils; import java.math.BigDecimal; import java.text.DecimalFormat; import java. ...
- 【转载】ANSYS的APDL与C语言混合编程(实例)
原文地址:http://www.cnblogs.com/lyq105/archive/2010/05/04/1727557.html 本文讨论的不是利用C语言为ANSYS写扩展(或者说是用户子程序), ...
- 如何让WordPress支持上传更多文件类型
如何让WordPress支持上传更多文件类型 可以在functions.php中这样写: 1 2 3 4 5 6 7 8 9 add_filter('upload_mimes', 'wpdit_f ...