canvas 是「一块可以用 JS 画图的位图区域」:拿到 2D 上下文后,用坐标、路径、样式指令逐帧绘制。它与 SVG 的根本区别是命令式位图——画完的图形不再是对象,改一个像素都要重画,换来的是大量元素时的高性能。
高清屏适配是第一道坎:canvas 的 CSS 尺寸与像素尺寸分离,必须按 devicePixelRatio 放大画布再缩放上下文,否则文字和线条发虚。
const cv = document.getElementById('c'); const ctx = cv.getContext('2d'); const dpr = window.devicePixelRatio || 1; cv.width = 600 * dpr; cv.height = 300 * dpr; // 物理像素放大 ctx.scale(dpr, dpr); // 逻辑坐标还原 ctx.fillStyle = '#2f81f7'; ctx.fillRect(20, 20, 120, 80); // 画矩形