JavaScript Canvas closePath 教程
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 JavaScript 中的 Canvas closePath 方法。此方法对于完成路径和在 HTML canvas 上创建闭合图形至关重要。理解 closePath 对于绘制多边形和复杂图形至关重要。
基本定义
closePath
方法用直线将路径的最后一个点连接到第一个点,从而创建一个闭合图形。它不同于手动绘制一条线到起点,因为它会处理子路径。
当与 beginPath
和 lineTo
等路径绘制方法一起使用时,closePath
会完成当前子路径。这对于填充或描边闭合图形特别有用。
基本的 closePath 用法
本示例演示了如何使用 closePath 绘制一个简单的三角形。
<!DOCTYPE html> <html> <head> <title>Basic closePath</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(50, 50); ctx.lineTo(150, 150); ctx.lineTo(250, 50); ctx.closePath(); ctx.stroke(); </script> </body> </html>
在此基本示例中,我们创建了一个 canvas 元素并获取其 2D 上下文。我们使用 beginPath
开始一个路径并移动到起点。
绘制两条线来创建三角形的两条边。closePath
会自动绘制第三条边来完成图形。最后,我们描边路径使其可见。
使用 closePath 填充图形
本示例展示了 closePath 如何创建可以填充的闭合图形。
<!DOCTYPE html> <html> <head> <title>Filled Shape with closePath</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(50, 50); ctx.lineTo(150, 150); ctx.lineTo(250, 50); ctx.closePath(); ctx.fillStyle = 'lightblue'; ctx.fill(); ctx.strokeStyle = 'blue'; ctx.stroke(); </script> </body> </html>
在这里,我们创建了与之前相同的三角形,但现在我们用颜色填充它。closePath
确保图形已正确闭合以便填充。
我们设置浅蓝色填充颜色并调用 fill
,然后添加蓝色描边轮廓。这演示了 closePath 如何同时实现图形的填充和描边。
使用 closePath 的多个子路径
本示例演示了在单个图形中使用 closePath 的多个子路径。
<!DOCTYPE html> <html> <head> <title>Multiple Subpaths</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); // First triangle ctx.moveTo(50, 50); ctx.lineTo(100, 150); ctx.lineTo(150, 50); ctx.closePath(); // Second triangle ctx.moveTo(200, 50); ctx.lineTo(250, 150); ctx.lineTo(300, 50); ctx.closePath(); ctx.fillStyle = 'pink'; ctx.fill(); ctx.strokeStyle = 'red'; ctx.stroke(); </script> </body> </html>
此示例通过多次调用 moveTo
和 closePath
在一个路径中创建两个独立的三角形。每个三角形都是一个独立的子路径。
两个子路径一起被填充和描边。closePath
确保每个三角形在移动到下一个图形之前都已正确闭合。
使用 closePath 的复杂图形
本示例展示了如何使用 closePath 创建更复杂的图形。
<!DOCTYPE html> <html> <head> <title>Complex Shape</title> </head> <body> <canvas id="myCanvas" width="400" height="300"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); // Main rectangle ctx.moveTo(100, 50); ctx.lineTo(300, 50); ctx.lineTo(300, 200); ctx.lineTo(100, 200); ctx.closePath(); // Cutout triangle ctx.moveTo(150, 100); ctx.lineTo(250, 100); ctx.lineTo(200, 175); ctx.closePath(); ctx.fillStyle = 'lightgreen'; ctx.fill(); ctx.strokeStyle = 'darkgreen'; ctx.lineWidth = 3; ctx.stroke(); </script> </body> </html>
在这里,我们使用两个子路径创建一个带有三角形镂空的矩形。首先绘制主矩形并使用 closePath
闭合。
然后我们添加一个三角形子路径,当填充时它将作为镂空。偶数-奇数填充规则(默认)使三角形显示为矩形中的一个孔。
closePath 与弧线
本示例演示了如何使用 closePath 与弧线段创建图形。
<!DOCTYPE html> <html> <head> <title>closePath with Arcs</title> </head> <body> <canvas id="myCanvas" width="400" height="300"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); // Start at top center ctx.moveTo(200, 50); // Draw right semicircle ctx.arc(200, 150, 100, -Math.PI/2, Math.PI/2); // Draw left semicircle ctx.arc(200, 150, 50, Math.PI/2, -Math.PI/2, true); ctx.closePath(); ctx.fillStyle = 'rgba(200, 200, 0, 0.5)'; ctx.fill(); ctx.strokeStyle = 'orange'; ctx.lineWidth = 4; ctx.stroke(); </script> </body> </html>
本示例通过弧线和 closePath 创建了一个顶部平坦的甜甜圈形状。我们从顶部中心开始,并沿相反方向绘制两个半圆。
closePath
将最后一个弧线的末端连接回起点,从而创建了一个完整的图形。结果用半透明的黄色填充,并用橙色描边。
来源
在本文中,我们探讨了使用 closePath 在 HTML canvas 上创建闭合图形的各种技术。掌握此方法对于在 Web 应用程序中绘制多边形和复杂图形至关重要。
作者
列出 所有 JS Canvas 教程。