lineTo() 简介

lineTo() 是 Canvas 2D 上下文中用于从当前画笔位置画一条直线到指定坐标的方法。

语法

ctx.lineTo(x, y);
参数 说明
x 直线终点的 X 坐标
y 直线终点的 Y 坐标

基本用法

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

ctx.beginPath();
ctx.moveTo(50, 50);      // 先把笔放到起点
ctx.lineTo(200, 50);     // 从 (50,50) 画线到 (200,50)
ctx.lineTo(200, 200);    // 再从 (200,50) 画线到 (200,200)
ctx.stroke();            // 描边显示路径

执行流程

moveTo(50, 50)  →  当前位置: (50, 50)
lineTo(200, 50) →  从 (50,50) 画到 (200,50),当前位置更新为 (200, 50)
lineTo(200, 200)→  从 (200,50) 画到 (200,200),当前位置更新为 (200, 200)

每次调用 lineTo() 后,画笔位置会自动更新到终点坐标,方便连续绘制。

典型应用

1. 绘制三角形:

ctx.beginPath();
ctx.moveTo(100, 50);     // 顶部顶点
ctx.lineTo(175, 185);    // 画到底部右侧
ctx.lineTo(25, 185);     // 画到底部左侧
ctx.closePath();         // 自动画回顶部顶点,闭合图形
ctx.fillStyle = 'orange';
ctx.fill();

2. 绘制网格线:

// 画水平线
for (let y = 0; y <= 400; y += 50) {
  ctx.beginPath();
  ctx.moveTo(0, y);
  ctx.lineTo(400, y);
  ctx.strokeStyle = '#ddd';
  ctx.stroke();
}

// 画垂直线
for (let x = 0; x <= 400; x += 50) {
  ctx.beginPath();
  ctx.moveTo(x, 0);
  ctx.lineTo(x, 400);
  ctx.strokeStyle = '#ddd';
  ctx.stroke();
}

3. 绘制箭头:

function drawArrow(ctx, fromX, fromY, toX, toY) {
  const headLen = 15;    // 箭头长度
  const angle = Math.atan2(toY - fromY, toX - fromX);

  ctx.beginPath();
  ctx.moveTo(fromX, fromY);
  ctx.lineTo(toX, toY);
  ctx.stroke();

  // 画箭头头部
  ctx.beginPath();
  ctx.moveTo(toX, toY);
  ctx.lineTo(
    toX - headLen * Math.cos(angle - Math.PI / 6),
    toY - headLen * Math.sin(angle - Math.PI / 6)
  );
  ctx.lineTo(
    toX - headLen * Math.cos(angle + Math.PI / 6),
    toY - headLen * Math.sin(angle + Math.PI / 6)
  );
  ctx.closePath();
  ctx.fillStyle = 'black';
  ctx.fill();
}

moveTo() 配合使用

// 画一个 "Z" 字形
ctx.beginPath();
ctx.moveTo(50, 50);      // Z 的起点
ctx.lineTo(150, 50);     // 顶部横线
ctx.lineTo(50, 150);     // 斜线
ctx.lineTo(150, 150);    // 底部横线
ctx.stroke();

注意事项

情况 结果
未调用 moveTo() 直接调用 lineTo() (0, 0) 开始画线
连续多次 lineTo() 形成连续的折线
配合 closePath() 自动画回起点闭合图形
配合 fill() 自动闭合路径再填充

一句话总结

lineTo(x, y) 就是从当前位置画一条直线到指定坐标,画完后当前位置自动更新到目标点,适合用来画直线段、折线和多边形。