今天学习了h5中的canvas标签,结合之前学习的画星星的算法,画出了满天繁星的效果图

下面是展示:

做这个比较难的是画星星的算法,下面是帮助大家理解一个图:

只需要找到上面的十个点(5个小圆的点和5个大圆的点)之间的规律,使用ctx.lineTo依次连接就OK了。

大圆和小圆的5个点之间的度数都相差72度。

cos和sin的值可以用Math.cos()和Math.sin()计算

然后下面是具体的代码示例:

demo.html

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="utf-8"><title></title>
</head>
<body><canvas id="canvas" style="border:1px solid #aaa;margin: 50px auto;display:block;"></canvas>
<script type="text/javascript" src="star.js"></script>
</body>
</html>

star.js

// 画星空
window.onload = function() {// 找到画布var canvas = document.getElementById("canvas");// 定义画布的长宽canvas.width = 1000;canvas.height = 800;// 上下文,用于绘制var context = canvas.getContext("2d");/*** [skyStyle description]* @type {[type]}* createRadialGradient是径向渐变填充函数*createRadialGradient的参数*从左至右依次为:* x0,y0,r0:起点的位置(相对canvas画布)和小圆的半径* x1,y1,r1:扩散至的终点的位置和大圆的半径*/var skyStyle = context.createRadialGradient(canvas.width/2,canvas.height,0,canvas.width/2,canvas.height,canvas.height);//添加颜色skyStyle.addColorStop(0.0,'#035');skyStyle.addColorStop(1.0,'black');//将skyStyle用于填充展示天空的背景色context.fillStyle = skyStyle;//绘制矩形背景context.fillRect(0,0,canvas.width,canvas.height);for (var i = 0; i < 200; i++) {var r = Math.random() * 5 + 5;var x = Math.random()*canvas.width;// 让星星都在canvas画布的上面65%的区域显示var y = Math.random()*canvas.height*0.65;var a = Math.random()*360;drawStar(context, x, y, r, a);}};// 绘制五角星
// 改善后的drawStar使用了渐变色radialGrad(径向渐变)让天空的颜色更加逼真
/*** [drawStar description]* @param  {[type]} cxt [description] 绘制的上下文环境* @param  {[type]} r   [description] 五角星内部小圆的半径* @param  {[type]} R   [description] 五角星外部大圆的半径* @param  {[type]} x   [description] 五角星在水平方向上的位移* @param  {[type]} y   [description] 五角星在竖直方向上的位移* @param  {[type]} rot [description] 五角星的旋转角度* @return {[type]}     [description]*/
function drawStar(ctx, x, y, R, rot) {ctx.save();//与restore()一起出现,防止状态影响其他的绘制//图形变换ctx.translate(x,y);//偏移ctx.rotate(rot/180*Math.PI);//旋转ctx.scale(R,R);//缩放比例startPath(ctx);//开始绘制ctx.fillStyle = "#fb3";//内部填充的颜色ctx.fill();//内部填充颜色ctx.restore();}/*** [startPath description]画星星的具体算法* @param  {[type]} ctx [description]* @return {[type]}     [description]*/
function startPath (ctx) {ctx.beginPath();for( var i = 0; i < 5; i++) {ctx.lineTo(Math.cos((18 + i*72)/180*Math.PI),-Math.sin((18 + i*72)/180*Math.PI));ctx.lineTo(Math.cos((54 + i*72)/180*Math.PI) * 0.5,-Math.sin((54 + i*72)/180*Math.PI) * 0.5);}ctx.closePath();
}

使用canvas画出满天繁星相关推荐

  1. 通过canvas画出爱心图案,表达你的爱意!

    通过canvas画出爱心图案,浏览器可以使用以下js代码,新建对象时,会自动呈现动画效果,代码文末可下载. 点击免费下载源码 let HeartCanvas = new HeartCanvas() / ...

  2. 如何用 canvas 画出分形图

    前言 分形是一门以非规则几何形态为研究对象的几何学,由曼德勃 罗(B.B.Mandelbrot)等人创立并命名. 分形图从整体上看,是处处不规律的.但从局部观察,图形的规则性又是相同的,即具有自相似的 ...

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

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

  4. openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据)

    openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据) 修改后的源代 ...

  5. java代码画樱花_樱花的季节,教大家用CANVAS画出飞舞的樱花树

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

  6. java代码画樱花飘落_樱花的季节,教大家用canvas画出飞舞的樱花树

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

  7. html5画布画出折线图,canvas 画出动态折线图

    canvas 是 html5 支持的一个标签,用于图形的绘制.canvas 标签仅仅提供了图形的容器,必须通过 js 脚本来绘制. 比如,绘制一个简单的矩形: 矩形.png var c=documen ...

  8. 微信小程序利用canvas画出根据文字自适应的边框

    1.需求 生成海需要画出一个中空带边框的的tag,如下图.众所周知,微信小程序里的canvas画图都是需要自己一点点画出来,不想html有htmlToCanvas,直接写HTML就可以转成canvas ...

  9. php image 平滑曲线,如何使用canvas画出平滑的曲线?(代码)

    本篇文章给大家带来的内容是关于如何使用canvans画出平滑的曲线?(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 背景概要 相信大家平时在学习canvas 或 项目开发中使 ...

最新文章

  1. C语言结构体自动初始化实现,C语言中结构体(struct)的几种初始化方法
  2. html js文本框文字列出,js实现文本框中输入文字页面中div层同步获取文本框内容的方法...
  3. virtualbox添加slic2.
  4. 数学建模学习笔记——聚类模型
  5. 設備(IE01/IE02/IE03)客製欄位及BAPI處理
  6. 含有参数的sql拼接_关于SQL语句参数中为多个带.字符串。
  7. CSS 3 中的伪类选择器
  8. 微软热门开源项目及代码库地址
  9. web安全---XSS利用平台BLUE-LOTUS安装与使用
  10. python实验练习-类的多继承
  11. Node.js babel
  12. Snagit 2021 for mac截图工具 v2021.4.2(98044)汉化版
  13. 关于Ajax的一揽子工程(2)
  14. Eclipse tooltip变黑的修正
  15. 灵格斯怎么屏幕取词_屏幕取词插件 -- Lingoes Translator 灵格斯词霸
  16. 无法打开xlsx文件_什么是XLSX文件(以及如何打开一个文件)?
  17. Linux安装必须建立的三个分区
  18. EHub_tx1_tx2_E100 测试VisionWorks跑自带的demo
  19. win10配置Java环境
  20. 纯css实现div背景色从左到右的刷动效果

热门文章

  1. 2022年1月语音合成(TTS)和语音识别(ASR)论文月报
  2. 12c及以上参数推荐设置
  3. java编写实现更新_Android实现APP自动更新功能
  4. 远程网络教学系统功能(用例图)
  5. PO 审批 PO Release
  6. 2021EC-final博弈论E题Prof. Pang and Poker
  7. 语句摘抄——第29周
  8. 回首过去,抚心自问,是什么“毁了”你的大学生活?
  9. 公网访问阿里云RDS云数据库
  10. 一文搞懂 Python 私有属性 私有方法