# Lines

# Line

Canvas 中绘制线条,我们需要使用 beginPath()moveTo()lineTo()stroke() 4个方法。首先使用 beginPath() 方法表明我们将要进行绘制工作;然后使用 moveTo()Canvas 的画布上设置一个起点坐标;接着使用 lineTo() 绘制一条从起点坐标到终点坐标的直线;最后还需要使用 stroke() 使得这条直线在屏幕上可见。注意:默认情况下线条是黑色的。

<!DOCTYPE HTML>
<html>
  <head>Line</head>
  <body>
    <canvas id="container" width="578" height="200"></canvas>
    <script>
      const canvas = document.getElementById('container');
      const ctx = canvas.getContext('2d');

      ctx.beginPath();
      ctx.moveTo(100, 150);
      ctx.lineTo(450, 50);
      ctx.stroke();
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# Line Width

使用 lineWidth 属性定义线条的宽度。注意:

  • 必须在调用 stroke() 之前设置才会生效。
  • 赋值为:0、 负数、 Infinity 和 NaN 会被忽略。
  • 单位是 px
<!DOCTYPE HTML>
<html>
  <head>lineWidth</head>
  <body>
    <canvas id="container" width="578" height="200"></canvas>
    <script>
      const canvas = document.getElementById('container');
      const ctx = canvas.getContext('2d');

      ctx.beginPath();
      ctx.moveTo(100, 150);
      ctx.lineTo(450, 50);
      // 设置线条宽度
      ctx.lineWidth = 15;
      ctx.stroke();
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# Line Color

使用 strokeStyle 属性定义线条的颜色。该属性支持像“red”、“green”、“blue”这样的颜色值,也支持像“#FF0000”、“#FFF”的十六进制,还支持像“rgb(255, 0, 0)”这样的 RBG 值。注意:必须在调用 stroke() 之前设置才会生效。

<!DOCTYPE HTML>
<html>
  <head>strokeStyle</head>
  <body>
    <canvas id="container" width="578" height="200"></canvas>
    <script>
      const canvas = document.getElementById('container');
      const ctx = canvas.getContext('2d');

      ctx.beginPath();
      ctx.moveTo(100, 150);
      ctx.lineTo(450, 50);
      ctx.lineWidth = 15;
      // 设置线条颜色
      ctx.strokeStyle = "red";
      ctx.stroke();
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# Line Cap

使用 lineCap 属性定义线条末端的形状,目前支持3种形状:buttroundsquare,默认为 butt。注意:必须在调用 stroke() 之前设置才会生效。

<!DOCTYPE HTML>
<html>
  <head>lineCap</head>
  <body>
    <canvas id="container" width="578" height="200"></canvas>
    <script>
      const canvas = document.getElementById('container');
      const ctx = canvas.getContext('2d');

      // lineCap 为 butt
      ctx.beginPath();
      ctx.moveTo(100, canvas.height / 2 - 50);
      ctx.lineTo(canvas.width - 200, canvas.height / 2 - 50);
      ctx.lineWidth = 15;
      ctx.strokeStyle = "#0000ff";
      ctx.lineCap = "butt";
      ctx.stroke();

      // lineCap 为 round
      ctx.beginPath();
      ctx.moveTo(100, canvas.height / 2);
      ctx.lineTo(canvas.width - 200, canvas.height / 2);
      ctx.lineWidth = 15;
      ctx.strokeStyle = "#0000ff";
      ctx.lineCap = "round";
      ctx.stroke();

      // lineCap 为 square
      ctx.beginPath();
      ctx.moveTo(100, canvas.height / 2 + 50);
      ctx.lineTo(canvas.width - 200, canvas.height / 2 + 50);
      ctx.lineWidth = 15;
      ctx.strokeStyle = "#0000ff";
      ctx.lineCap = "square";
      ctx.stroke();
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# Line Join

使用 lineJoin 属性定义两条线条相连部分的形状。目前支持3种形状:bevelroundmiter,默认是 miter。 注意:必须在调用 stroke() 之前设置才会生效。

<!DOCTYPE HTML>
<html>
  <head>lineJoin</head>
  <body>
    <canvas id="container" width="578" height="500"></canvas>
    <script>
      const canvas = document.getElementById('container');
      const ctx = canvas.getContext('2d');

      // lineJoin 为 miter
      ctx.beginPath();
      ctx.moveTo(100, 20);
      ctx.lineTo(200, 100);
      ctx.lineTo(300, 20);
      ctx.lineWidth = 15;
      ctx.lineJoin = "miter";
      ctx.stroke();

      // lineJoin 为 round
      ctx.beginPath();
      ctx.moveTo(100, 70);
      ctx.lineTo(200, 150);
      ctx.lineTo(300, 70);
      ctx.lineWidth = 15;
      ctx.lineJoin = "round";
      ctx.stroke();

      // lineJoin 为 bevel
      ctx.beginPath();
      ctx.moveTo(100, 120);
      ctx.lineTo(200, 200);
      ctx.lineTo(300, 120);
      ctx.lineWidth = 15;
      ctx.lineJoin = "bevel";
      ctx.stroke();
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38