canvas学习之API整理笔记(一)

其实canvas本身很简单,就是去学习它的API,多看实例,多自己动手练习,多总结。但是canvas的API实在是有点多,对于初学者来说,可能学到一半就止步不前了。我也有这种感觉,在学习的过程中,编写实例,用到了其中很多的属性和方法,但是回头来看的时候总觉得什么也没用。所以决定系统性的记录一下它常用到的API,方便以后查阅,也顺便造福一下大家。

开始之前

假设html代码中有一个canvas标签:

<canvas>你的浏览器不支持canvas!</canvas>

如果你的浏览器是IE8及以下,那么很遗憾,上面那段文字会被渲染出来!而且下面的方法也都不能使用了;所以请使用支持canvas的浏览器来使用后面的方法。

//获取canvas容器 var can = document.getElementById(‘canvas'); //创建一个画布 var ctx = can.getContext(‘2d');

另外我们可以还可以得到容器的宽和高度

var canWid = can.width; //canvas 的宽度 var canHei = can.height; //canvas 的高度

canvas只是一个容器,本身没有绘制的能力,所以我们要得到一个画布ctx,使之具有绘制各种图形的能力。下文所有的方法都是ctx的方法。

绘制

绘制一个矩形:

//填充矩形(x, y是横纵坐标,原点在canvas的左上角) ctx.fillRect(x, y, width, height); //边框矩形,默认1px 黑色。 ctx.strokeRect(x, y, width, height); //清除指定的矩形区域,变为透明 ctx.clearRect(x, y, width, height); //绘制动态效果时,常用来清除整个画布

绘制路径:

//新建路径,beginPath是绘制新图形的开始 ctx.beginPath() //路径(线)的起点,一般在上面这条命令后执行 ctx.moveTo(x, y) //线的终点 ctx.lineTo(x, y) //绘制圆形 ctx.arc(x, y, r, start, end, true/false) //x, y圆心,r半径,start和end是开始和结束角度,false表示顺时针(默认),true表示逆时针。 //绘制弧线 ctx.arcTo(x1, y1, x2, y2, r); //当前端点、(x1,y1)和(x2,y2)这三个点连成的弧线,r是半径。 //闭合路径,不是必须的,如果线的终点跟起点一样,会自动闭合。 ctx.closePath() //通过线条绘制轮廓(边框) ctx.stroke() //通过路径填充区域(实心) ctx.fill()

说明:

fill()和stroke()函数表示绘图结束。如果要继续绘制,需要重新新建路径(beginPath())。

如果lineTo()最后的路径没有封闭,fill()函数会自动封闭路径,而stroke()函数不会。

例:绘制一个三角形

ctx.beginPath(); ctx.moveTo(75, 50); //路径起点 ctx.lineTo(100, 75); ctx.lineTo(100, 25); ctx.fill(); //自动将路径闭合,并默认填充黑色。

样式

颜色

ctx.fillStyle = 'red' //针对fill()有效的颜色,还可以取值:'#fff'、'rgba(0, 0, 0, 0.5)'等。 ctx.strokeStyle = 'red' //针对stroke()有效的颜色,取值同上。 ctx.globalAlpha = 0.5; //透明度

线段端点

ctx.lineWidth = 2; //线条宽度 ctx.lineCap = 'butt(默认)'、'round(圆弧)'、'square(方形)' //线段端点显示的样式

var ctx = document.getElementById('canvas').getContext('2d'); var lineCap = ['butt','round','square']; ctx.strokeStyle = 'black'; for (var i=0;i<lineCap.length;i++){ ctx.lineWidth = 15; ctx.lineCap = lineCap[i]; ctx.beginPath(); ctx.moveTo(25+i*50,10); ctx.lineTo(25+i*50,140); ctx.stroke(); }

效果如下图:

canvas学习之API整理笔记(一)

线段连接处

ctx.lineJoin = 'miter(默认)'、round(圆角)、`bevel(横线)`   //两线段连接处所显示的样子

var ctx = document.getElementById('canvas').getContext('2d'); var lineJoin = ['round','bevel','miter']; ctx.lineWidth = 10; for (var i=0;i<lineJoin.length;i++){ ctx.lineJoin = lineJoin[i]; ctx.beginPath(); ctx.moveTo(10,50+i*40); ctx.lineTo(50,10+i*40); ctx.lineTo(90,50+i*40); ctx.lineTo(130,10+i*40); ctx.lineTo(170,50+i*40); ctx.stroke(); }

效果如下图:

canvas学习之API整理笔记(一)

虚线

ctx.setLineDash([4, 2]) //设置虚线,参数为数组,第一个值为实现宽度,第二个值为空白的宽度 ctx.lineDashOffset = 0; //虚线起始偏移量

var can = document.getElementById('canvas'); var ctx = can.getContext('2d'); var offset = 0; function draw() { offset++; if (offset > 16) { offset = 0; } ctx.clearRect(0,0, can.width, can.height); ctx.setLineDash([6, 2]); ctx.lineDashOffset = -offset; ctx.strokeRect(10,10, 100, 100); } setInterval(draw, 20);

效果如下图:

canvas学习之API整理笔记(一)

渐变

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjdfd.html