Canvas
介绍
canvas 是绘制图形的。
canvas 是一个二维网格。左上角坐标为 (0,0)
首先创建一个画布
<canvas id="cvs" width="1000" height="800"></canvas>
然后获取到画布和二维模型
let canvas = document.getElementById('cvs');
let ctx = canvas.getContext('2d');
ctx 就相当于画笔了
检查支持性
let canvas = document.getElementById('cvs');
if (canvas.getContext) {
// 支持canvas
} else {
// 不支持canvas
}
大小
canvas 默认大小是宽度 300px,高度 150px。不能设置百分比,不能通过 css 设置宽高
方式一、直接设置 width 和 height 属性
<canvas id="cvs" width="1000" height="800"></canvas>
方式二、通过 js 设置
let canvas = document.getElementById('cvs');
let ctx = canvas.getContext('2d');
ctx.width = 1000; // 可以不写单位px
ctx.height = 800;
如果想动态设置宽高,比如想让 canvas 的宽度占据屏幕的 70%,根据16:9
的比例计算高度
const canvasWidth = window.innerWidth * 0.7;
const canvasHeight = (canvasWidth * 9) / 16;
ctx.width = canvasWidth;
ctx.height = canvasHeight;
线
ctx.moveTo(10, 20); // 定义起点
ctx.lineTo(50, 100); // 定义终点
ctx.strokeStyle = '#f00'; // 线的颜色
ctx.stroke(); // 画线
注意设置样式要在绘制之前,否则无效
画个树:
ctx.beginPath();
ctx.moveTo(500, 50);
ctx.lineTo(300, 200);
ctx.lineTo(450, 200);
ctx.lineTo(200, 300);
ctx.lineTo(450, 300);
ctx.lineTo(450, 400);
ctx.lineTo(550, 400);
ctx.lineTo(550, 300);
ctx.lineTo(770, 300);
ctx.lineTo(550, 200);
ctx.lineTo(700, 200);
ctx.fillStyle = '#0f0';
ctx.fill();
ctx.strokeStyle = '#0f0';
ctx.stroke();
ctx.closePath();
电子画笔
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
let drawStatus = false;
canvas.onmousedown = e => {
ctx.moveTo(e.offsetX, e.offsetY);
drawStatus = true;
};
canvas.onmouseup = () => (drawStatus = false);
canvas.onmouseout = () => {
if (drawStatus) {
drawStatus = false;
}
};
canvas.onmousemove = e => {
if (drawStatus) {
ctx.lineTo(e.offsetX, e.offsetY);
ctx.stroke();
}
};