什么是canvas
Canvas 中文名叫 “画布”,是 HTML5 新增的一个标签。
Canvas 允许开发者通过 JS在这个标签上绘制各种图案。
Canvas 拥有多种绘制路径、矩形、圆形、字符以及图片的方法。
Canvas 在某些情况下可以 “代替” 图片。
Canvas 可用于动画、游戏、数据可视化、图片编辑器、实时视频处理等领域。
首先了解canvas的x轴与y轴

一、填充效果
fillStyle = "red 或者 #fff" 填充区域的颜色
fillRect(X轴坐标,Y轴坐标,宽度,高度)填充区域
- 效果:
<style>
canvas {
border: 1px solid;
}
</style>
<body>
<canvas width="600" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.fillStyle = "skyblue";
ctx.fillRect(100, 100, 100, 100);
</script>

二、描边效果
- strokeStyle="颜色" 描边颜色
- strokeRect(X轴纵坐标,Y轴坐标,宽度,高度) 描边效果
- 效果:
<style>
canvas {
border: 1px solid;
}
</style>
<body>
<canvas width="600" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.strokeStyle = "red";
ctx.strokeRect(100, 100, 100, 100);

三、清除
- clearRect(X轴坐标,Y轴坐标,宽度,高度) 清除
<style>
canvas {
border: 1px solid;
}
</style>
<body>
<canvas width="600" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.fillStyle = "skyblue";
ctx.fillRect(100, 100, 100, 100);
ctx.clearRect(150, 100, 50, 50);
</script>

三、绘制不同颜色的直线
- moveTo(X轴坐标,Y轴坐标) 起点坐标
- lineTo(X轴坐标,Y轴坐标) 下一个点坐标
- stroke() 将坐标用一条线连接起来
- strokeStyle="颜色" 线的颜色
- linewidth="1" 线条宽度
<style>
canvas {
border: 1px solid;
}
</style>
<body>
<canvas width="600" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.strokeStyle = "yellow";
ctx.lineTo(300, 200);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(300, 200);
ctx.strokeStyle = "red";
ctx.lineTo(500, 100);
ctx.stroke();
</script>

四、画一个三角形
<style>
canvas {
border: 1px solid;
}
</style>
<body>
<canvas width="600" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(200, 300);
ctx.lineTo(300, 300);
ctx.lineTo(300, 100);
ctx.closePath();
ctx.stroke();
</script>

五、水平方向文字对齐
- font("字体大小,字体")
- X轴 textBaseline("字体对齐方向") top,bottom,middle
- fillText('文字',X轴坐标,Y轴坐标)
<style>
canvas {
border: 1px dotted;
}
</style>
<body>
<canvas width="600" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.moveTo(0, 100);
ctx.lineTo(600, 100);
ctx.stroke();
ctx.font = "60px 微软雅黑";
ctx.textBaseline = "top";
ctx.textBaseline = "bottom";
ctx.textBaseline = "middle";
ctx.fillText("Hello Word", 100, 100);
</script>

六、垂直方向对齐
- textAlign("文字对齐方向") left、right、center
<style>
canvas {
border: 1px solid;
}
</style>
<body>
<canvas width="600" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.moveTo(200,0)
ctx.lineTo(200,600)
ctx.stroke()
ctx.font = "60px 宋体"
ctx.textAlign="left"
ctx.textAlign="right"
ctx.textAlign = "center"
ctx.fillText('Hello Word',200,200)
</script>

七、移动的盒子
<style>
canvas {
border: 1px dashed;
}
</style>
<body>
<canvas width="500" height="600"></canvas>
</body>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
let x = 0;
let y = 0;
let a = 10;
let b = 1;
let timer = setInterval(() => {
ctx.clearRect(x, y, 50, 50);
x += a;
y += b;
ctx.fillRect(x, y, 50, 50);
if (x >= 450 || x <= 0) {
a *= -1;
}
if (y >= 550 || y <= 0) {
b *= -1;
}
}, 10);
ctx.fillStyle = "skyblue";
</script>
