Html5 实现灯笼绘制

最近在学习Html5,就用JavaScript在Canvas试着绘制了一个灯笼,并作了简要的说明。

具体绘制思路在页面上有说明,不再赘述,代码如下:

 1 <script type="text/javascript">
 2         //绘制椭圆
 3         function ParamEllipse(context, x, y, a, b) {
 4             //max是等于1除以长轴值a和b中的较大者
 5             //i每次循环增加1/max,表示度数的增加
 6             //这样可以使得每次循环所绘制的路径(弧线)接近1像素
 7             var step = (a > b) ? 1 / a : 1 / b;
 8             context.fillStyle = "#ff0000";
 9             context.beginPath();
10             context.moveTo(x + a, y); //从椭圆的左端点开始绘制
11             for (var i = 0; i < 2 * Math.PI; i += step) {
12                 //参数方程为x = a * cos(i), y = b * sin(i),
13                 //参数为i,表示度数(弧度)
14                 context.lineTo(x + a * Math.cos(i), y + b * Math.sin(i));
15             }
16             context.closePath();
17             context.stroke();
18             context.fill();
19             context.closePath();
20         };
21
22         //绘制矩形
23         function FillRect(context, x, y, w, h, flag) {
24             var grd = context.createLinearGradient(x+w/2, y, x + w/2, y + h);
25             if (flag) {
26                 grd.addColorStop(0, "yellow");
27                 grd.addColorStop(1, "red");
28             } else {
29                 grd.addColorStop(0, "red");
30                 grd.addColorStop(1, "yellow");
31             }
32             context.fillStyle = grd;
33             context.fillRect(x, y, w, h);
34         }
35
36         //绘制线条
37         function SetLine(ctx, x, y, x1, y1) {
38             ctx.beginPath();
39             ctx.strokeStyle = "yellow";
40             ctx.moveTo(x,y);
41             ctx.lineTo(x1,y1);
42             ctx.stroke();
43             ctx.closePath();
44         }
45         window.onload = function () {
46             var c = document.getElementById("myCanvas");
47             var ctx = c.getContext("2d");
48             var startX = 150; //中心坐标x
49             var startY = 300; //中心坐标y
50             var pWidth = 120; //椭圆长轴
51             var pHeigth = 80; //椭圆形短轴
52             var fWidth = 120; //矩形宽
53             var fheight = 40; //矩形高
54             //绘制椭圆
55             ParamEllipse(ctx, startX, startY, pWidth, pHeigth);
56             //在椭圆上方和下方绘制长方形,且有一半的高度和椭圆重叠
57             FillRect(ctx, startX - fWidth / 2, startY - pHeigth - (fheight / 2), fWidth, fheight, true);
58             FillRect(ctx, startX - fWidth / 2, startY + pHeigth - (fheight / 2), fWidth, fheight, false);
59             //在矩形下方绘制线条,8个单位一条线,长度为40,均匀分布在矩形下方
60             var lLen = fheight; //画线的范围始终在矩形之下
61             var lInterval = 8; //线与线之间的间隔
62             for (var i = 0; i < (fWidth / 8) + 1; i++) {
63                 SetLine(ctx, startX - fWidth / 2 + i * lInterval, startY + pHeigth + fheight / 2, startX - fWidth / 2 + i * lInterval, startY + pHeigth + fheight / 2 + lLen);
64             }
65             //对三部分进行拆解
66             //1. 上矩形
67             var right = 380;
68             FillRect(ctx, startX - fWidth / 2 + right, startY - pHeigth - (fheight / 2) - 150, fWidth, fheight, true);
69             //2. 中椭圆
70             ParamEllipse(ctx, startX + right, startY - 50, pWidth, pHeigth);
71             //3. 下矩形
72             FillRect(ctx, startX - fWidth / 2 + right, startY + pHeigth - (fheight / 2) + 50, fWidth, fheight, false);
73             //4. 下线
74             for (var i = 0; i < (fWidth / 8) + 1; i++) {
75                 SetLine(ctx, startX - fWidth / 2 + i * lInterval + right, startY + pHeigth + fheight / 2 + 100, startX - fWidth / 2 + i * lInterval + right, startY + pHeigth + fheight / 2 + lLen + 100);
76             }
77             //画线,将其连接起来
78             var lsX = startX + pWidth + 20;
79             var lsY = startY;
80             var leX = startX + pWidth + 20 + 100;
81             var leY = startY;
82             SetLine(ctx, lsX, startY - 30, leX - 30, leY - 150);
83             SetLine(ctx, lsX, startY - 15, leX, leY - 50);
84             SetLine(ctx, lsX, startY + 15, leX, leY + 100);
85             SetLine(ctx, lsX, startY + 30, leX - 30, leY + 150);
86
87             //左上标写上说明
88             ctx.font = "35px Arial";
89             var t = "灯笼组成--2016-11-13";
90             ctx.fillText(t, 50, 50);
91         }
92
93     </script>

时间: 2024-12-18 21:51:45

Html5 实现灯笼绘制的相关文章

[HTML5 Canvas学习]绘制矩形

1.使用strokeRect和fillRect方法绘制矩形 a.strokeRect是绘制一个不填充的矩形 b.fillRect是绘制一个填充的矩形 代码: <script> var canvas = document.getElementById('canvas'), context = canvas.getContext('2d'); context.lineJoin = 'round'; context.lineWidth = 20; context.strokeRect(10, 10,

HTML5 WebAudioAPI(四)--绘制频谱图2

绘制分析器数组所有数据.本文内容,承接上文 1.800宽度绘制 var url='../content/audio/海阔天空.mp3'; if (!window.AudioContext) { alert('您的浏览器不支持AudioContext'); } else { //创建上下文 var atx = new AudioContext(); var source = null; //使用Ajax获取音频文件 var request = new XMLHttpRequest(); reque

通过HTML5标签canvas绘制一个八卦图案

只需要用到casvas标签和fillStyle.arc.beginPath.closePath.fill方法 代码如下: <canvas id="rect" width="310" height="310" style="border:1px yellow solid;"> </canvas> <script> var id=document.getElementById("rec

HTML5 WebAudioAPI(三)--绘制频谱图

HTML <style> #canvas { background: black; } </style> <div class="container"> <button class="btn btn-primary" id="playBtn"> <i class="glyphicon glyphicon-pause"></i> </button>

HTML5 在canvas绘制一个矩形

笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/32930501 一.绘制矩形 canvas使用原点(0,0)在左上角的坐标系统,x坐标向右递增.y坐标向下递增. 使用画图环境的矩形绘制函数来绘制矩形. fillRect(x,y,width,height) : 绘制一个实心的矩形. strokeRect(x,y,width,height) : 绘制一个空心的矩形. clearRect(x,y,width,height) :

HTML5用canvas绘制五星红旗

在HTML5一览中,我们提到html 5被冠以很多高帽,其中最高的一顶.备受争议的就是"Flash杀手".IT评论界老喜欢用这个词了,杀手无处不在.不管是不是杀手,HTML 5引进的一些新特性确实让人兴奋不已.最令人期待的之一就是 canvas元素. 作为HTML5标准的一部分,Canvas元素允许脚本动态渲染点阵图像.这个 HTML 元素是为了客户端矢量图形而设计的.它自己没有行为,但却把一个绘图 API 展现给客户端 javascript 以使脚本能够把想绘制的东西都绘制到一块画布

HTML5学习笔记-绘制变形图形之绘制带阴影图形

绘制带阴影效果的图形 在canvas上绘制带阴影效果的图形只需设置shadowOffsetX,shadowOffsetY,shadowBlur,shadowColor属性. shadowOffsetX,shadowOffsetY表示阴影的x,y偏移量单位像素:可以使用负值,正负偏移方向不同.shadowBlur设置阴影模糊程度,值越大,阴影越模糊,效果与Photoshop的高斯模糊滤镜相同:shadowColor设置阴影颜色. 1 <h3>绘制阴影效果</h3> 2 <can

html5 canvas 鼠标绘制

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> body{ background:pink; } #c1{ background:white; } </style> <script> window.onload = function () { var oC = do

HTML5 用 canvas 绘制心形线

笛卡尔的心形线 桃心形 这个桃心比较符合口味..遂决定使用此方程.. 当然还有一些其它方程,如下: 下面就开始写程序了. <!DOCTYPE html> <html> <head> <title>Draw Heart</title> <style type="text/css"> * { margin: 0; padding: 0; } html { height: 100%; margin: 0; } body