代码实例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
canvas{
background:#eee;
}
</style>
<title>星星</title>
<meta charset="utf-8"> <script>
window.onload=function () {
var canvas=document.getElementById("canvas");
var cobj=canvas.getContext("2d"); var starArr=[];
for (var i=0; i<30; i++) {
var starObj={
radius1:20+10*Math.random(),radius2:8+7*Math.random(),x:30+(canvas.width-60)*Math.random(),y:30+(canvas.height-60)*Math.random(),num:Math.ceil(4+4*Math.random()),color:"rgb("+parseInt(255*Math.random())+","+parseInt(255*Math.random())+","+parseInt(255*Math.random())+")",angle:360*Math.random(),changeAngle:-5+10*Math.random()
}
starArr.push(starObj);
}
setInterval(function () {
cobj.clearRect(0,0,500,500);
for (var i=0; i<starArr.length; i++) {
starArr[i].angle+=starArr[i].changeAngle;
cobj.save();
cobj.beginPath();
cobj.translate(starArr[i].x,starArr[i].y);
cobj.rotate(starArr[i].angle*Math.PI/180);
cobj.scale(Math.sin(starArr[i].angle*Math.PI/180),Math.sin(starArr[i].angle*Math.PI/180))
cobj.globalAlpha=Math.abs(Math.sin(starArr[i].angle*Math.PI/180));
drawStar (0,0,starArr[i].radius1,starArr[i].radius2,starArr[i].num,"fill",starArr[i].color);
cobj.restore();
}
},60) function drawStar (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);
}
cobj.beginPath();
cobj.fillStyle=color;
cobj.strokeStyle=color;
cobj.moveTo(arr[0].x,arr[0].y);
for (var i=1; i<arr.length; i++) {
cobj.lineTo(arr[i].x,arr[i].y);
}
cobj.closePath();
if(drawType=="fill"){
cobj.fill();
}else{
cobj.stroke();
}
}
}
</script>
</head>
<body>
<canvas id="canvas" width=500 height=500>
</canvas>
</body>
</html>

  效果:

最新文章

  1. [Android] 多重使用Fragment 中的onFragmentInteraction
  2. c++ 访问者模式(visitor pattern)
  3. Microsoft.AlphaImageLoader滤镜讲解
  4. os模块
  5. 黑马程序员——JAVA基础之set集合
  6. MongoDB 基础
  7. 使用VNC远程连接Windows Azure Linux虚拟机
  8. Java基础知识强化之多线程笔记06:Lock接口 (区别于Synchronized块)
  9. 推荐一款好用的java反编译软件——JavaDecompiler
  10. http://blog.csdn.net/dyllove98/article/details/7706218
  11. JDBC数据源连接池的配置和使用实例
  12. Python学习笔记3-文件的简单操作
  13. eclipse如何快速抽取样式(style)或者include
  14. RMQ算法
  15. Ubuntu14.04下如何配置固定IP
  16. vue props命名最好直接使用kebab-case (短横线隔开式) 命名
  17. kaldi的TIMIT实例三
  18. 2018-08-11 中文代码示例之Spring Boot 2.0.3问好
  19. [CF575B]Bribes
  20. elasticsearch 测试

热门文章

  1. Leetcode_131. Palindrome Partitioning_[DFS]
  2. html+js(swiper.js)+css左右滑动切换页面效果,适配移动端
  3. day12—jQuery ui引入及初体验
  4. 关闭myeclipse中烦人的鼠标划过,自动提示功能
  5. 测开之路七十六:性能测试蓝图之html
  6. 16/7/9_Bootstrap-设计原则
  7. 【python】 全角半角转换
  8. 《JAVA设计模式》之组合模式(Composite)
  9. [功能集锦] 003 - 一键生成mysql数据字典/数据库速查表
  10. [eclipse中使用Git插件] 008 - git操作pull、merge、stash、commit