Web前端On the Road(成为大牛)H5学习笔记H5技术栈

浅析HTML5的Canvas——1

2017-06-03  本文已影响82人  LiLi原上草

一.Canvas的基本介绍

定义:是HTML5提供的一种新标签, ie9才开始支持的,Canvas是一个矩形区域的画布,是使用js的一个api接口,可以用JS控制每一个像素在上面绘画。canvas 标签使用 JavaScript 在网页上绘制图像,本身不具备绘图功能。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
用canvas作画。直接在HTML架构中写一个canvas即可:

创建画布
<canvas id="cvs" width="800" height="600">你的浏览器不支持canvas</canvas>

其中标签里面的文字是给不支持canvas的浏览器看的,支持的永远看不到。这个画布的特性有必要说一下,他有两个原生的属性,即width和height。通常我们使用它自身的宽高属性来设置它的宽高,除非特殊情况,一定不要用css来定义Canvas的宽高。

  1. 画布有了,现在我们把他拿出来:
var cvs = document.getElementById('cvs');
  1. 画笔现在画布已经有了,想往上面涂鸦,当然还需要一只笔。canvas取得笔的方法如下:
var ctx = cvs.getContext('2d');
  1. 调用画笔下相关方法绘制图案:
ctx.beginPath();  //3、1开始绘制
ctx.moveTo(10,10);  //3、2放置起点的坐标
ctx.lineTo(10,210);  //3、3放置画笔的途径点坐标
ctx.lineTo(210,210);            
ctx.closePath();  //把起点和结束点连接起来,形成一个闭合的图案
 ctx.stroke()  //3、4绘制线条

此时在页面上就可以看到西面的效果:


页面输出效果

到这里,想必大家对canvas已经有了一定的了解,下面来详细介绍canvas该如何绘制线条!

在开始之前我们先拿出画布和画笔:

var cvs = document.getElementById('cvs'); //画布
var ctx = cvs.getContext('2d'); // 画笔

我们画画的时候,落笔点是不固定的,随时都会变。canvas虽然不是通过手来决定落笔点,但也有一个方法,就是moveTo。moveTo的作用相当于指定画笔放置的起点(即坐标):

ctx.moveTo(x,y);

我们必须开始画。先画最简单的:直线,画直线的方法即lineTo,他的参数和moveTo一样的,都是一个点:

ctx.lineTo(x,y);

下面我们就来实际画4条线围成一个矩形:

ctx.moveTo(100,100);
ctx.lineTo(200,100);
ctx.lineTo(200,200);
ctx.lineTo(100,200);
ctx.lineTo(100,100);
ctx.stroke();

此时刷新,就能看到一个四边形了。
由上面的图形我们可以看出,默认的线条粗细是1px,而线条颜色是黑色。当然我们可以设置他们:

ctx.lineWidth = 10;
ctx.strokeStyle = 'rgba(255,0,0,0.5)';

上面的代码把线条宽度设置成了10px,线条颜色变成了半透明的红色。

线条宽度设置成了10px
怎么左上角缺了一小块似得?这不是错觉。原因就是使用canvas的线条绘制,需要进行闭合,不然每一条由.lineTo()绘制出的线段都会自动连接起来,除了起点和终点。
所以我们需要用closePath(),来进行闭合:
ctx.moveTo(100,100);
ctx.lineTo(200,100);
ctx.lineTo(200,200);
ctx.lineTo(100,200);
ctx.lineTo(100,100);
ctx.closePath();//闭合路径
ctx.lineWidth = 10;
ctx.strokeStyle = 'rgba(255,0,0,0.5)';
ctx.stroke();

此时刷新,就是一个完美的正方形了。如图:


Canvas闭合路径 用closePath()

如果我想使矩形的边角变成圆角,有没有办法呢?当然有,就是lineJoin属性。lineJoin,意思即线的交汇处,有3个属性:miter(默认,尖角),bevel(斜角),round(圆角),如图:

lineJoin属性
通过前面图我们了解到,Canvas的线条两端是平的,可不可以改呢?毕竟平的不好看。也是可以的,即lineCap属性,这个就是定义线条的端点。lineCap有3个值:butt(平,默认),round(圆),square(方),如图:
lineCap属性

canvas的填充:
一般绘图的方式有两种,即填充和描边,前面的文章已经讲了描边的方法stroke,本文就讲一下Canvas中填充图形的方法。 填充即fill(),很直白吧?而且和strokeStyle表示描边样式一样,fillStyle即表示填充样式。默认的填充样式是不透明的黑色:

ctx.fillStyle = '颜色';    //设置填充颜色
ctx.fill();                //填充

canvas里提供了绘制矩形的方法:

ctx.strokeRect(x,y,w,h)   //x,y表示起始坐标;w,h表示宽高;

可以使用fillRect()直接填充一个矩形:

ctx.fillRect(x,y,width,height);

canvas的渐变:
在Canvas中,渐变色同样分为两种,即** 线性渐变 径向渐变 **,而且创建他们的方法也是独立的。

createLinearGradient**(x1,y1,x2,y2);

有4个参数!x1,y1就是表示线性渐变的起点坐标,x2,y2就表示终点坐标。我们先创建一个水平的线性渐变试试吧:

var linear = ctx.createLinearGradient(100,100,200,100);

渐变创建了,开始填充。往渐变条里加颜色的方法是addColorStop(透明度,color).但要注意了,这个addColorStop不是加在画笔上,而是加在前面的那个保存渐变的变量上,我这里是canvas:

var canvas= ctx.createLinearGradient(100,100,200,100);
canvas.addColorStop(0,'#fff');
canvas.addColorStop(0.5,'#f0f');
canvas.addColorStop(1,'#333');

这时候,我们就可以填充渐变色了,但我们必须先把定义好的渐变赋给fillStyle:

var cvs = document.getElementById('cvs'); //画布
var ctx = cvs.getContext('2d'); // 画笔
var canvas= ctx.createLinearGradient(100,100,200,100);
canvas.addColorStop(0,'#fff');
canvas.addColorStop(0.5,'#f0f');
canvas.addColorStop(1,'#333');
ctx.fillStyle = canvas; //把渐变赋给填充样式
ctx.fillRect(100,100,100,100);
ctx.stroke();
渲染效果
createRadialGradient(x1,y1,r1,x2,y2,r2)

其中的x1,y1,x2,y2依旧表示起点和终点,不过这里的起点和终点都是一个圆,而x,y则是圆心的坐标。所以,r1与r2分别是起点圆的半径和终点圆的半径。

var cvs = document.getElementById('cvs'); //画布
var ctx = cvs.getContext('2d'); // 画笔
var radial = ctx.createRadialGradient(55,55,10,55,55,55); //重合的圆心坐标
radial.addColorStop(0,'#fff');
radial.addColorStop(0.5,'#ff0');
radial.addColorStop(0.9,'#555');
radial.addColorStop(1,'#f00');
ctx.fillStyle = canvas; //把渐变赋给填充样式
ctx.fillRect(100,100,100,100);
ctx.stroke();

这里我设置的径向渐变起点圆和终点圆的圆心坐标相同,而起点圆半径为10,终点圆半径为55.最后画出的径向渐变范围是一个宽高110的圆形,说明渐变范围以终点圆的范围为准。

渲染效果

Canvas的基本介绍先介绍到这里,下一篇文章继续介绍canvas如何绘制曲线及绘制基本图形;如果对您有所帮助的话,请点赞并关注哦,我会不定时的更新一下自己学习的经验以及见解,和大家进行交流。

您赞就是是我最大的动力!!!

上一篇下一篇

猜你喜欢

热点阅读