Newbie_小白
没有都对的别人,也没有全错的自己,至少要有自己的坚持,无关他人、无关外物!
canvas 元素用于在网页上绘制图形

什么是 Canvas?

HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。

画布是一个矩形区域,您可以控制其每一像素。

canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

 canvas 方法:

方法用途
getContext(contextId) 公开在 canvas 上绘图需要的 API。惟一(当前)可用的 contextID2d
height 设置 canvas 的高度。默认值是 150 像素。
width 设置 canvas 的宽度。默认值是 300 像素。
createLinearGradient(x1,y1,x2,y2) 创建一个线性渐变。起始坐标为 x1,y1,结束坐标为 x2,y2
createRadialGradient(x1,y1,r1,x2,y2,r2) 创建一个放射状渐变。圆圈的起始坐标是 x1,y1,半径为 r1。圆圈的结束坐标为 x2,y2,半径为 r2
addColorStop(offset, color) 向一个渐变添加一个颜色停止。颜色停止(color stop) 是渐变中颜色更改发生的位置。offset 必须介于 0 到 1 之间。
fillStyle 设置用于填充一个区域的颜色 — 例如,fillStyle='rgb(255,0,0)'.
strokeStyle 设置用于绘制一根直线的颜色 — 例如,fillStyle='rgb(255,0,0)'.
fillRect(x,y,w,h) 填充一个定位于 xy,宽度和高度分别为 wh 的矩形。
strokeRect(x,y,w,h) 绘制一个定位于 xy,宽度和高度分别为 wh 的矩形的轮廓。
moveTo(x,y) 将绘图位置移动到坐标 x,y
lineTo(x,y) 从绘图方法结束的最后位置到 x,y 绘制一条直线。

 

创建 Canvas 元素

向 HTML5 页面添加 canvas 元素。

规定元素的 id、宽度和高度:

<canvas id="myCanvas" width=800" height="800" style="border:1px solid #c3c3c3;">//width和height属性一定要和canvas一起出现,不要用id在css中实现。
Your browser does not support the canvas element.
</canvas>

通过 JavaScript 来绘制

canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:
<script type="text/javascript">
var c = document.getElementById("myCanvas");
var cxt = c.getContext("2d");
cxt.fillStyle = "#FF0000";
cxt.fillRect(0, 0, 150, 75);
</script>

JavaScript 使用 id 来寻找 canvas 元素:


var c = document.getElementById("myCanvas");

然后,创建 context 对象:


var cxt = c.getContext("2d");

getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。


下面的两行代码绘制一个红色的矩形:


 cxt.fillStyle = "#FF0000";
cxt.fillRect(0, 0, 150, 75);

fillStyle 方法将其染成红色,fillRect 方法规定了形状、位置和尺寸。

理解坐标

上面的 fillRect 方法拥有参数 (0,0,150,75)。

意思是:在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。

如下图所示,画布的 X 和 Y 坐标用于在画布上对绘画进行定位。

更多 Canvas 实例

实例 - 线条

通过指定从何处开始,在何处结束,来绘制一条线:

<canvas id="myCanvas" width="200" height="200" style="border:1px solid #ff1a10;">
Your browser does not support the canvas element.
</canvas>
<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.moveTo(20,20);
cxt.lineTo(100,100);
cxt.lineTo(30,150);
cxt.stroke();
</script>

result:

 

 

理解坐标


上面的 cxt.moveTo方法拥有参数(20,20);

意思是:在画布上绘制 以(20,20)为起点。

路线依次替丁到cxt.lineTo(100,100);—— cxt.lineTo(30,150);

 

实例 - 圆形

 

通过规定尺寸、颜色和位置,来绘制一个圆:

<canvas id="myCanvas" width="200" height="200" style="border:1px solid #ff1a10;">
Your browser does not support the canvas element.
</canvas>
<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.beginPath();
cxt.arc(100,100,50,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();
</script>

 


result:


理解坐标

       cxt.beginPath();                                      开始画圆
  cxt.arc(100,100,50,0,Math.PI*2,true);    原点X,原点y,半径,开始狐度数,结束狐度数,顺时针
  cxt.closePath();                                        画圆结束

 


实例 - 渐变

使用您指定的颜色来绘制渐变背景:


<canvas id="myCanvas" width="200" height="200" style="border:1px solid #ff1a10;">
Your browser does not support the canvas element.
</canvas>
<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
var grd=cxt.createLinearGradient(0,0,175,50);
grd.addColorStop(0,"#FF0000");
grd.addColorStop(0.6,"#00FF00");
grd.addColorStop(1,"#f5ff3a");
cxt.fillStyle=grd;
cxt.fillRect(10,10,175,50);

</script>
result:

理解坐标:
context.createLinearGradient(x0,y0,x1,y1);-----x0渐变开始点的 x 坐标;y0渐变开始点的 y 坐标;x1渐变结束点的 x 坐标;y1渐变结束点的 y 坐标。

实例 - 图像

把一幅图像放置到画布上:

<canvas id="myCanvas" width="200" height="200" style="border:1px solid  #ff1a10;">
Your browser does not support the canvas element.
</canvas>
<script type="text/javascript">

var c = document.getElementById("myCanvas");
var cxt = c.getContext("2d");
var img = new Image()
img.src = "img/flower.png"
img.onload = function () {
cxt.drawImage(img, 50, 50);
};
cxt.drawImage(img, 50, 50);

</script>
result:

理解坐标:
img.onload = function () {
cxt.drawImage(img, 50, 50);
};
解决图片不显示问题
 

笑脸火柴人实战:
<canvas id="myCanvas" width="200" height="400" style="border:1px solid  #ff1a10;">
Your browser does not support the canvas element.
</canvas>
<script type="text/javascript">
var c = document.getElementById("myCanvas");
var cxt = c.getContext("2d");

// 脸的轮廓
cxt.beginPath();
cxt.fillStyle = "#F1FF32";
cxt.arc(100,100,50,0,Math.PI*2, true);
cxt.closePath();
cxt.fill();

// 嘴巴轮廓
cxt.beginPath();
cxt.strokeStyle="#c00";
cxt.arc(100,100,30,0,Math.PI,false);
// cxt.closePath(); 若加此代码,则口会封起来
cxt.lineWidth=8;
cxt.stroke();

// 眼睛轮廓
cxt.beginPath();
cxt.fillStyle="#c00";
cxt.arc(84,90,8,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();

cxt.beginPath();
cxt.fillStyle="#c00";
cxt.arc(115,90,8,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();

// 身体轮廓
cxt.beginPath();
cxt.lineWidth=5;
cxt.strokeStyle="000000";
cxt.moveTo(100,150);
cxt.lineTo(100,280);

cxt.moveTo(100,200);
cxt.lineTo(30,250);

cxt.moveTo(100,200);
cxt.lineTo(170,250);

cxt.moveTo(100,280);
cxt.lineTo(40,330);

cxt.moveTo(100,280);
cxt.lineTo(160,330);
cxt.stroke();
</script>


result:

 

posted on 2016-04-27 20:41  Newbie_小白  阅读(1136)  评论(0编辑  收藏  举报