HTML5Canvas学习笔记(canvas绘制线条、矩形、多边形、
圆、⾃定义图像)
⼀、对 canvas 的理解
<canvas>标签是 HTML5 中的新标签,像所有的 dom 对象⼀样它有⾃⼰本⾝的属性、⽅法和事件。
canvas 是⽤来在⽹页上绘制图形的(我们通常称之为画布),canvas 只是图形容器,需要使⽤ js 脚本来绘制图形,可以绘制线条、矩形、多边形、圆形、圆环、组合图形、⽂字、⾃定义图像等。
浏览器⽀持
注释:Internet Explorer 8 以及更早的版本不⽀持 <canvas> 标签。Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari ⽀持 <canvas>标签。
⼆、基本⽅法
绘图环境:
语法 Context(contextID)
参数contextID指定了您想要在画布上绘制的类型。当前唯⼀的合法值是 "2d",它指定了⼆维绘图,并且导致这个⽅法返回⼀个环境对象,该对象导出⼀个⼆维绘图API。
【注】:getContext() ⽅法返回⼀个⽤于在画布上绘图的环境。
getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的⽅法。
绘制图形样式style(⼀般在绘制图形前先进⾏样式设定):
context.fillStyle //填充样式
context.strokeStyle //笔触颜⾊
context.lineWidth //边框宽度
绘制图像有两种⽅法:
context.fill() //填充
context.stroke() //绘制边框
颜⾊的表⽰⽅式:
颜⾊名称:"red" "green" "blue"
⼗六进制颜⾊值: "#FFFFFF"
三⾊值:rgb(1-255,1-255,1-255)
四⾊值:rgba(1-255,1-255,1-255,透明度)
三、使⽤ <canvas>
Step1: ⾸先在html页⾯中添加<canvas>标签,规定好画布的id和尺⼨,代码如下:
<!--规定了canvas元素的id名称为canvas、宽度为400px、⾼度为300px-->
<canvas id="myCanvas" width="400" height="300"/>
Step2: 通过JavaScript来进⾏绘制:
⽅法⼀:
<!--⽤⾕歌浏览器,获取canvas对象时需要先加载对象,所以要把该段代码放到body中,在js⽂件⾥进⾏绘制图像-->
<script src="canvas.js"></script>
⽅法⼆:
<!--或者直接在body⾥编写代码-->
<script type="text/javascript">
var canvas = ElementById("myCanvas");
var context = Context("2d");
context.fillStyle = "#FF0000";
context.fillRect(50,50,150,100);
</script>
图解:
Step3: Step2 分步骤:
通过id来捕获canvas元素
创建 context 对象
指定 fillStyle 填充颜⾊为红⾊指定 fillRect :fillRect(起始点x轴坐标, 始点y轴坐标, 宽度, ⾼度);
四、实例
1--绘制线条:
veTo(x,y)
context.lineTo(x,y)
x:x坐标
y:y坐标
起点 moveTo 的点到终点 lineTo 的点之间画⼀条直线
如果没有moveTo那么第⼀次lineTo的效果和moveTo⼀样
每次lineTo后如果没有moveTo,那么下次lineTo的开始点为前⼀次lineTo的结束点
1 1 // 绘制对⾓线
2 2 function demo1(id){
3 3 var canvas = ElementById(id);
4 4 var context = Context("2d");
5 5
6 6 context.strokeStyle = "#ff0000";
7 7
8 8 veTo(0,0);
9 9 context.lineTo(200,100);
10 10 context.stroke();
11 11 }
View Code
实例结果:
1// 绘制直⾓三⾓形
2function demo1(id){
3var canvas = ElementById(id);
4 var context = Context("2d");
5
6 context.strokeStyle = "#ff0000";
7
8 context.lineTo(20, 20);
9 context.lineTo(20, 70);
10 context.lineTo(70, 70);
11 context.lineTo(20, 20);
12 context.stroke();
13 }
View Code
【注】:
1. 三⾓形有三个点,但在连线的时候还需要连回顶点;
2. 最后⼀定记得加上 stroke(); 初学时容易犯这个⽑病,这相当于你把点定好了,却没⽤线连起来,岂不......
实例结果:
CSS属性中有⼀圆⾓设置 radius,canvas画线段也要达到这种圆⾓匾额效果,我么也有相应的办法:
lineJoin 属性,可以设置线的交汇处的样式,lineJoin有3个属性值:miter(尖⾓,默认),bevel(斜⾓),round(圆⾓)
lineCap 属性,定义线条的端点。lineCap有3个属性值:butt(平,默认),round(圆),square(⽅)
区别只是平头没有伸出去那么⼀截。圆头和⽅头都会伸出去⼀截,这⼀节是多长呢?就是线条宽度的⼀半。借⽤⼀张图说明: 1// 圆⾓连线
2function demo1(id){
3
4var canvas = ElementById(id);
5 var context = Context("2d");
6
7 context.beginPath();
8 veTo(100,8);
9 context.lineTo(180,8);
10 context.closePath();
11 context.lineWidth = 8;
12 context.strokeStyle = "#00ff00";
13 context.lineJoin = "round";
14 context.stroke();
15
16 context.beginPath();
17 veTo(100,20);
18 context.lineTo(100,80);
19 context.lineTo(180,80);
20 context.lineTo(180,20);
21 context.lineTo(100,20);
22 context.closePath();//闭合路径
23 context.lineWidth = 10;
24 context.strokeStyle = 'rgba(0,255,0,0.5)';
25 context.lineJoin = "round";
26 context.stroke();
27 }
View Code
实例结果:
2--绘制矩形:
context.fillRect(x,y,width,height)
strokeRect(x,y,width,height)
x:矩形起点横坐标
y:矩形起点纵坐标
width:矩形的宽度
height:矩形的⾼度
1// 矩形
2function demo2(id){
3var canvas = ElementById(id);
4 var context = Context("2d");
5
6// 1排1----默认填充为⿊⾊ fillStyle = "#000"
7 context.fillRect(20, 20, 60, 60);
8// 1排2----默认边框为⿊⾊ strokeStyle = "#000"
9 context.strokeRect(100, 20, 60, 60);
10
11// 2排----⾃定义填充⾊和边框颜⾊
12 context.fillStyle = "#0000ff";
13 context.strokeStyle = "#ff0000";
14
15 context.fillRect(20, 100, 60, 60); //蓝⾊填充矩形
16
17 context.strokeRect(100, 100, 60, 60); //红⾊边框矩形
18
19 context.lineWidth = 10; //设置边框线框
20 context.strokeRect(180, 100, 60, 60); //加粗边框矩形
21
22// 3排----清除20*20的矩形区域
23 context.fillStyle = "#00ff00";
24
25 context.fillRect(20, 180, 60, 60);
26 context.clearRect(30, 190, 20, 20);
27
28// 4排----给矩形添加透明度
29 context.fillStyle = "rgba(0,255,0,0.2)";
30 context.strokeStyle = "rgba(0,255,0,0.2)";
31
32 context.fillRect(20, 260, 60, 60); //变浅的红⾊填充矩形
33
34 context.lineWidth = 10; //设置边框线框,0.2的透明度不易观察
35 context.strokeRect(100, 260, 60, 60); //变浅的红⾊边框矩形
36 }
【注】:
1. 起点☞指的是矩形左上⾓的顶点
2. rgba(0, 255, 0, 0.2) 前三个参数为红绿蓝三⾊,最后⼀个参数是透明度参数,参数值范围0~1,接近于0越透明实例结果:
3--绘制圆:
创建圆形⽅法定义:xxx.arc(x,y,radius,startAngle,endAngle,anticlockwise)
x :圆的中⼼的 x 坐标html5颜代码
y :圆的中⼼的 y 坐标
r :圆的半径
sAngle :起始⾓,以弧度计(弧的圆形的三点钟位置是 0 度)
eAngle :结束⾓,以弧度计
counterclockwise :可选。规定应该逆时针还是顺时针绘图。False 为顺时针,true 为逆时针
1// 圆形
2function demo3(id){
3var canvas = ElementById(id);
4 var context = Context("2d");
5
6 context.strokeStyle = "00FF00";
7
8 context.beginPath();
9 context.arc(50, 50, 30, 0, 2*Math.PI, true);
10 context.stroke();
11 }
View Code
【注】:2*Math.PI 就是2∏
实例结果:
1// 填充圆形
2function demo3(id){
3var canvas = ElementById(id);
4 var context = Context("2d");
5
6 context.fillStyle = "#0000ff";
7 context.strokeStyle = "#ff0000";
8
9 context.beginPath();
10 context.arc(50, 50, 30, 0, 2*Math.PI, true);
11 context.closePath();
12 context.stroke();
13 context.fill();
14 }
View Code
实例结果:
1// 同⼼圆
2function demo3(id){
3var canvas = ElementById(id);
4 var context = Context("2d");
5//外圆
6 context.fillStyle = "#0000ff";
7 context.strokeStyle = "#ff0000";
8 context.beginPath();
9 context.arc(50, 50, 40, 0, 2*Math.PI, true);
10 context.closePath();
11 context.stroke();
12 context.fill();
13//内圆
14 context.fillStyle = "pink";
15 context.beginPath();
16 context.arc(50, 50, 20, 0, 2*Math.PI, true);
17 context.closePath();
18 context.fill();
19 }
View Code
实例结果:
4--绘制路径:
context.beginPath()
context.closePath()
context.arc(x,y,radius,startAngle,endAngle,anticlockwise)圆的⾓度 2*Math.PI,1/4⾓度就是Math.PI/4
1// 路径
2function demo4(id){
3var canvas = ElementById(id);
4 var context = Context("2d");
5 // 填充
6 context.beginPath();
7 context.arc(20, 20, 50, 0, Math.PI/2 , false);
8 context.closePath();
9 context.fillStyle = '#0000ff';
10 context.fill();
11// 边框
12 context.beginPath();
13 context.arc(100, 20, 50, 0, Math.PI/2 , false);
14 context.strokeStyle = '#0000ff'
15 context.closePath();
16 context.stroke();
17// 填充+边框
18 context.beginPath();
19 context.arc(180, 20, 50, 0, Math.PI/2 , false);
20 context.strokeStyle = '#0000ff';
21 context.closePath();
22 context.stroke();
23 context.fillStyle = 'rgba(0,0,255,0.2)';
24 context.fill();
25 }
View Code
有边框线实例结果:
// 没有 beginPath(); closePath();
context.arc(100, 100, 50, 0, Math.PI/2 , false);
context.arc(200, 200, 50, 0, Math.PI/2 , false);
context.fillStyle = 'rgba(0,0,255,0.2)';
context.fill();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论