html Canvas绘图基础教程

2026-04-24 07:00:16 1396阅读 0评论

用 HTML5 Canvas 绘出你的第一幅画:从零到能用的实操指南

初见 Canvas,像在纸上直接用 JavaScript 作画,既直观又灵活。本篇不讲大框架与最佳实践,只带你从安装画布、准备笔刷到绘制基本形状与动画,一步步落地能用的案例。

一、搭建画布环境

在 HTML 文件中插入 <canvas> 元素,宽度高度可按需设置,常见为 800×600:

<canvas id="myCanvas" width="800" height="600"></canvas>

用 JavaScript 获取画布上下文,它就是绘图的“画笔”:

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

二、基础属性与笔触控制

先设定画布背景,再配置线条与填充:

ctx.fillStyle = '#f0f0f0'; // 设置填充色
ctx.fillRect(0, 0, canvas.width, canvas.height); // 填充整个画布

ctx.strokeStyle = '#333'; // 设置线条颜色
ctx.lineWidth = 3; // 设置线宽

通过 lineCaplineJoin 可调节线段末端与转折处的样式,适合画边框或细节:

ctx.lineCap = 'round'; // 线段两端为圆形
ctx.lineJoin = 'round'; // 转折处为圆角

三、绘制基本形状

1. 矩形

直接用 fillRectstrokeRect 绘制:

ctx.fillStyle = 'blue';
ctx.fillRect(100, 100, 200, 150);

ctx.strokeStyle = 'red';
ctx.strokeRect(100, 100, 200, 150);

2. 圆形

arc 绘制圆或圆弧,先设好起始点与半径:

ctx.beginPath();
ctx.arc(400, 300, 100, 0, Math.PI * 2);
ctx.fillStyle = 'green';
ctx.fill();

3. 多边形

任意多边形可通过数组指定顶点,moveTolineTo 连接:

ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(200, 150);
ctx.lineTo(150, 200);
ctx.closePath();
ctx.strokeStyle = 'purple';
ctx.lineWidth = 4;
ctx.stroke();

四、文本绘制

Canvas 文本不支持多行样式复杂排版,但基础使用很简单:

ctx.font = '30px Arial';
ctx.fillStyle = 'black';
ctx.fillText('Hello Canvas', 50, 50);

注意 fillText 的 y 坐标是文本的基线位置,常需通过 fontline-height 估算视觉位置。

五、动画与交互

结合 requestAnimationFrame 实现平滑动画,并用鼠标事件记录点击位置:

let x = 100, y = 100;
canvas.addEventListener('click', (e) => {
  const rect = canvas.getBoundingClientRect();
  x = e.clientX - rect.left;
  y = e.clientY - rect.top;
});

function draw() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.beginPath();
  ctx.arc(x, y, 10, 0, Math.PI * 2);
  ctx.fillStyle = 'orange';
  ctx.fill();
  requestAnimationFrame(draw);
}

draw();

六、实用技巧与注意事项

  • 清除与重绘:用 clearRect 清除局部或全部区域,配合重绘实现动画。
  • 坐标系:Canvas 坐标原点在左上角,y 轴向下增加,设计时注意反直觉。
  • 性能:尽量在 canvas 上绘制,减少 DOM 操作;复杂动画分层绘制。
  • 响应式:使用视窗尺寸计算画布宽高或缩放比例,保证在不同设备上正常显示。

结尾

掌握这些核心点,你就可以用 Canvas 绘制信息图表、小游戏或数据可视化了。从静态到互动,Canvas 为即时渲染提供了强大能力,关键在持续练习与场景化应用。把日常灵感直接落到代码,你会看到更灵活的表达方式与更直观的交互体验。

文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
验证码
评论列表 (暂无评论,1396人围观)

还没有评论,来说两句吧...

目录[+]