lineTo()仅添加线段到路径而不渲染,必须配合beginPath()、moveTo()和stroke()才能显示;漏掉任一环节或坐标设置不当均导致线条不可见。

lineTo() 不会立刻画出线,必须配合 beginPath()、moveTo() 和 stroke() 才能看见效果——漏掉任意一个,线就“消失”了。
为什么调用 ctx.lineTo() 后什么都没画出来
这是最常见误操作:单独写 ctx.lineTo(100, 50),页面完全没反应。因为 lineTo() 只是把点加进当前路径,并不渲染。
- 必须先调用
ctx.beginPath()开启新路径(否则会追加到上一条路径) - 必须用
ctx.moveTo(x, y)设定起点(否则从 (0,0) 或上一次终点开始连) - 必须最后调用
ctx.stroke()(或ctx.fill())来真正绘制 - 如果之前设过
ctx.lineWidth或ctx.strokeStyle,但没在stroke()前设置,可能画成默认黑色细线,容易被忽略
lineTo() 的坐标是相对当前位置,不是画布原点
lineTo(x, y) 总是从「当前绘图位置」画到 (x, y),这个「当前位置」由 moveTo()、上一个 lineTo()、arc() 等命令决定,不是固定从 (0,0) 开始。
- 连续调用
ctx.lineTo(50, 50); ctx.lineTo(100, 20);,第二条线起点其实是 (50, 50),不是 (0,0) - 想画折线,直接链式调用即可;想画多条独立线段,每次都要重新
moveTo() - 调试时可用
console.log(ctx.currentTransform)辅助判断当前坐标系,但更简单的是用ctx.moveTo()显式重置起点
画模糊线?大概率是坐标没对齐像素边界
当 lineWidth 是奇数(比如 1、3),且起点/终点坐标是整数时,浏览器会把线画在两个像素中间,导致抗锯齿模糊。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 快速修复:把坐标偏移 0.5,例如
ctx.moveTo(20.5, 20.5); ctx.lineTo(100.5, 20.5); - 只对描边(
stroke())有效;填充(fill())路径不受此影响 - Canvas 默认使用 CSS 像素单位,若 canvas 元素被缩放(如 width/height 与 style 宽高不一致),需按设备像素比缩放坐标,但那是另一层问题
lineTo() 和 moveTo() 的顺序不能颠倒
先 lineTo() 再 moveTo() 会导致第一条线从 (0,0) 出发——这是 Canvas 初始化的默认起点。
- 错误写法:
ctx.lineTo(100, 50); ctx.moveTo(200, 50); ctx.lineTo(300, 50);→ 第一条线是 (0,0)→(100,50),不是你想要的 - 正确写法:
ctx.moveTo(100, 50); ctx.lineTo(200, 50); ctx.moveTo(200, 50); ctx.lineTo(300, 50); - 注意:连续
lineTo()之间不需要重复moveTo(),只有想断开路径时才需要
真正难的不是记住 lineTo() 语法,而是理解它只是路径构造器中的一环——Canvas 绘图是「建模 + 渲染」两步分离的,漏掉建模逻辑或跳过渲染指令,线就永远在内存里,不会出现在屏幕上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










