Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。
属性
- height
- width
一个Canvas定义了一个指定尺寸的矩形框1
<canvas id="test-canvas" width="300" height="200"></canvas>
检测浏览器支持
由于浏览器对HTML5标准支持不一致,所以,通常在canvas内部添加一些说明性HTML代码,如果浏览器支持Canvas,它将忽略canvas内部的HTML,如果浏览器不支持Canvas,它将显示canvas内部的HTML
1 | <canvas id="test-stock" width="300" height="200"> |
在使用Canvas前,还需要用canvas.getContext来测试浏览器是否支持Canvas
1 | var canvas = document.getElementById('test-canvas'); |
方法
canvas绘图以左上角的(0, 0)为基准原点1
2
3
4let canvas = document.querySelector('#canvas'); // 得到canvas
//得到canvas上下文环境
let ctx = canvas.getContext('2d')//绘制2d图形
let gl = canvas.getContext("webgl");//绘制3d图形
绘制矩形
ctx.rect(x,y,width,height);
- 创建矩形。
- 但并不会真正将矩形画出,只能调用stroke() 或 fill()后才会真正作用于画布。
- 先填充再描边。
- 可通过canvas.width或canvas.height获取画布的宽度和高度
ctx.fillRect(x,y,width,height)
- 执行填充操作,绘制一个已填色的、以(x,y)位置为起点、大小为width x height的矩形。
- 有填充颜色,默认为black。
ctx.fillStyle=””
为图形设置填充颜色
ctx.strokeRect(x,y,width,height);
- 绘制一个不填色、以(x,y)位置为起点、大小为width x height的矩形。
- 有边框颜色,默认为black。
ctx.strokeStyle=””
为图形设置边框颜色
ctx.clearRect(x,y,width,height);
- 将(x,y)位置大小为width x height的矩形变为透明。
- Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 clearRect() 方法。
- 若canvas设置了背景颜色是不能被清除的,因为那是画布的背景颜色,clearRect清除的是绘制的图形,使绘制的图形变为透明,显现出画布背景色。
绘制复杂形状
ctx.lineWidth=x;
设置线宽为x,不需要加px
ctx.fill();
填充图形,可利用fillStyle设置填充颜色
ctx.stroke();
绘制图形,可利用strokeStyle设置边框颜色
ctx.beginPath();
清除原来的痕迹,绘制图形之前要先调用
ctx.closePath();
自动完成闭合
ctx.moveTo(x,y);
从(x,y)点开始绘图
ctx.lineTo(x,y);
绘图终点为(x,y)
ctx.arc(x, y, r, 起始弧度, 终点弧度,是否逆时针)
- 圆心为(x,y),半径为r
- 弧度 = Math.PI*角度
- 设置完弧线,要用moveTo()进行绘制
绘制文本
ctx.font = “24px 宋体”
设置字体大小、型号
ctx.fillText(“文字内容”,left,top);
- 绘制实心文字。
- left为距画布最左边距离,top为距画布最上边距离。
- 可通过fillStyke设置文字填充颜色
ctx.strokeText(“文字内容”,left,top);
- 绘制空心文字。
- left与top同上。
- 可通过strokeStyle设置文字边框颜色。
设置文字阴影
这些要在设置文字内容之前设置
- ctx.shadowOffsetX = x; x轴偏移量,默认位于元素正下方。
- ctx.shadowOffsetY = y; y轴偏移量,默认位于元素正下方。
- ctx.shadowBlur = num; 设置模糊系数。默认为0不模糊。
- ctx.shadowColor = “”; 设置阴影颜色,同时要设置shadowBlur,否则看不见
用canvas画出一个(0,0)坐标绿色的100x100矩形框
,再从(10,10)坐标将50x50的区域变成透明
1 | <canvas id="test" width="100px" height="100px"></canvas> |