效果图

五角星计算方式

代码

<body style="margin:0px;padding:0px;width:100%;height:100%;overflow:hidden;">
<canvas id="canvas" style="border: 1px solid #aaa" width="1920" height="962">
你的浏览器不支持canvas,请更换浏览器再试!
</canvas>
<script>
var c=document.getElementById("canvas");
c.width=document.body.clientWidth;
c.height=document.body.clientHeight; window.onload=function(){
if(c.getContext("2d")){
var cxt= c.getContext("2d");
}else{
document.write("你的浏览器不支持canvas,请更换浏览器再试!");
}
//星空背景颜色
var linearCrad=cxt.createLinearGradient(0,0,0, c.height* 0.68);
linearCrad.addColorStop(0.0, '#7ac4e1');
linearCrad.addColorStop(0.2, '#5eb8dd');
linearCrad.addColorStop(1.0, '#b6e2e5');
cxt.fillStyle=linearCrad;
cxt.fillRect(0,0, c.width, c.height);
//循环绘制100颗星星
for(var i=0 ; i<100 ; i++){
var r=Math.random() * 6 + 2;//半径
var x=Math.random() * c.width * 0.98 ; // x偏移量
var y=Math.random() * c.height * 0.6; //y偏移量
var a=Math.random() * 360; //旋转角度
drawStart(cxt , r/2.0 , r , x , y , a);
}
//月亮
fillMoon(cxt ,2, c.width * 0.88 , c.height * 0.24 ,100 ,20 , "#fff");
//绿地
drawLand(cxt);
}
/*
* cxt:绘图环境
* r:小圆半径
* R:大圆半径
* x:x轴偏移量
* y:y轴偏移量
* rot:旋转角度(逆时针)*/
function drawStart(cxt,r,R,x,y,rot){
cxt.beginPath();
cxt.fillStyle="#fff"
cxt.strokeStyle="#88b9dd";
for(var i=0 ; i < 5 ;i++){
cxt.lineTo( Math.cos((18+ i*72 - rot )/180 * Math.PI) * R + x//大圆
, -Math.sin((18 + i*72 - rot)/180 *Math.PI) * R + y);
cxt.lineTo( Math.cos((54+ i*72 - rot )/180 * Math.PI) * r + x//小圆
, -Math.sin((54 + i*72 - rot)/180 *Math.PI) * r + y);
}
cxt.closePath();
cxt.fill();
cxt.stroke();
}
/*
*参数说明
*R: 半径
* rot:旋转角度
*fillColor: 填充颜色
* */
function fillMoon(cxt ,d , x , y , R , rot , fillColor){
cxt.save();
cxt.translate(x , y);
cxt.rotate(rot * Math.PI / 180);
cxt.scale(R , R);
pathMoon(cxt , d);
cxt.fillStyle=fillColor || "#fb5";
cxt.shadowColor = "rgba(58,88,124,0.5)";
cxt.shadowOffsetX = 14 ;
cxt.shadowOffsetY = 14;
cxt.shadowBlur = 30;
cxt.fill(); cxt.restore();
}
/*
d :坐标
*/
function pathMoon(cxt , d){
cxt.beginPath();
/*
*圆心(0,0)
*半径:1
* */
cxt.arc(0 , 0 , 1 , 0.5 * Math.PI , 1.5 * Math.PI , true);
cxt.moveTo(0 , -1);
cxt.arcTo(d , 0 , 0 , 1 , dis(0 , -1 , d , 0) / d);
cxt.closePath();
}
function dis(x1 , y1 ,x2 , y2){
return Math.sqrt( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) );
} /*
* 绿地
* */
function drawLand(cxt){
cxt.save();
cxt.beginPath();
cxt.moveTo(0 , c.height * 0.7);
/*cxt.bezierCurveTo(540 , 400 , 660 , 800 , 1200 , 600);*/
cxt.bezierCurveTo(c.width * 0.4 , c.height * 0.5 , c.width * 0.5 , c.height * 0.9 , c.width , c.height * 0.8);
cxt.lineTo(c.width , c.height);
cxt.lineTo(0 , c.height);
cxt.closePath();
//添加渐变
var landStyle = cxt.createLinearGradient(0 , 800 , 0 ,0);
landStyle.addColorStop(0.0 ,'#7dbf44');
landStyle.addColorStop(0.2 ,'#b9d532');
landStyle.addColorStop(1 ,'#79bd46');
cxt.fillStyle=landStyle;
cxt.fill();
cxt.restore();
}
</script>
</body>

使用canvas绘制一片星空的更多相关文章

  1. HTML5 Canvas ( 绘制一片星空 )

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. HTML5 Canvas ( 绘制一轮弯月, 星空中的弯月 )

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 用HTML5绘制的一个星空特效图

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. HTML5学习总结——canvas绘制象棋(canvas绘图)

    一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...

  5. 用canvas绘制折线图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 封装 用canvas绘制直线的函数--面向对象

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 学习笔记:HTML5 Canvas绘制简单图形

    HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...

  8. canvas绘制经典折线图(一)

    最终效果图如下: 实现步骤如下:注-引用了jQuery HTML代码 <!doctype html> <html lang="en"> <head&g ...

  9. Canvas绘制图形

    1.Canvas绘制一个蓝色的矩形 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

随机推荐

  1. iOS 学习 - 20 UICollectionView 移动 Item ,类似背包

    有100个 item,数据源只有20个,只能在 20 个之间移动,防止 item 复用,出现 bug 方法一:苹果自带 //UICollectionViewDataSource- (BOOL)coll ...

  2. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  3. SQL*Plus环境变量设置浅析

    SQL*Plus的使用环境是可以通过login.sql 或 glogin.sql脚本来设置的,可能很多初学者或不习惯使用SQL*Plus的老鸟都不知道.因为在如今UI工具(Toad.PL/SQL De ...

  4. java实现支付宝接口--文档..转载

    //实现java支付宝很简单,只要从支付宝官方下载   http://help.alipay.com/support/index_sh.htm下载程序,配置一下参数就OK了:   1.先到http:/ ...

  5. MyEclipse编码设置及字体设置等

    原文: http://wenku.baidu.com/link?url=GTo5q8E1iVRYIYa-AiDP6_PJ4sQk7j1SPTr-CthVBw9hTGLPgR4TOeq9o8Sg0yEJ ...

  6. 用python pickle库来存储数据对象

    pickling有一个更常用的叫法是serialization,它是指把python对象转化成字节流byte stream, unpickling就是把byte stream转换成对象.python的 ...

  7. SCCM 2012 R2安装部署过程和问题(三)

    上篇 SCCM 2012 R2安装部署过程和问题(二) 个人认为对于使用SCCM 2012的最重要的经验是耐心. SCCM采用分布式部署的架构,不同的站点角色可以部署在不同的服务器上,站点角色之间的通 ...

  8. jsp2.0+中的标签文件,JSP Fragment技术

    刚进新公司不久,今天在看到项目中用到了.tag文件.刚开始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术.以 ...

  9. Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明

    Log4j  Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...

  10. BZOJ 3343: 教主的魔法 [分块]【学习笔记】

    3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1172  Solved: 526[Submit][Status][Discus ...