beginPath(路徑命令)

context.beginPath()

開始組裝一組新的路徑命令,並丟棄任何先前組裝的路徑。

它還將繪圖移動到畫布的左上角原點(== coordinate [0,0])。

雖然是可選的,但你應該始終使用 beginPath 啟動路徑

丟棄是一個重要且經常被忽視的問題。如果未使用 beginPath 開始新路徑,則將自動重繪以前發出的任何路徑命令。

這兩個演示都嘗試用一個紅色筆劃和一個藍色筆劃繪製 X

第一個演示正確使用 beginPath 開始它的第二個紅色筆畫。結果是 X 正確地具有紅色和藍色筆劃。

StackOverflow 文件

<!doctype html>
<html>
<head>
<style>
    body{ background-color:white; }
    #canvas{border:1px solid red; }
</style>
<script>
window.onload=(function(){

    // get a reference to the canvas element and it's context
    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    // draw a blue line
    ctx.beginPath();
    ctx.moveTo(30,30);
    ctx.lineTo(100,100);
    ctx.strokeStyle='blue';
    ctx.lineWidth=3;
    ctx.stroke();

    // draw a red line
    ctx.beginPath();        // Important to begin a new path! 
    ctx.moveTo(100,30);
    ctx.lineTo(30,100);
    ctx.strokeStyle='red';
    ctx.lineWidth=3;
    ctx.stroke();

}); // end window.onload
</script>
</head>
<body>
    <canvas id="canvas" width=200 height=150></canvas>
</body>
</html>

第二次演示錯誤地在第二次擊球時遺漏了 beginPath。結果是 X 錯誤地具有兩個紅色筆劃。

第二個 stroke() 繪製第二個紅色筆劃。

但是沒有第二個 beginPath,同樣的第二個 stroke() 也錯誤地重繪了第一個筆劃。

由於第二個 stroke() 現在被設定為紅色,因此第一個藍色筆劃被錯誤著色的紅色筆劃覆蓋

StackOverflow 文件

<!doctype html>
<html>
<head>
<style>
    body{ background-color:white; }
    #canvas{border:1px solid red; }
</style>
<script>
window.onload=(function(){

    // get a reference to the canvas element and it's context
    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    // draw a blue line
    ctx.beginPath();
    ctx.moveTo(30,30);
    ctx.lineTo(100,100);
    ctx.strokeStyle='blue';
    ctx.lineWidth=3;
    ctx.stroke();

    // draw a red line
    // Note: The necessary 'beginPath' is missing! 
    ctx.moveTo(100,30);
    ctx.lineTo(30,100);
    ctx.strokeStyle='red';
    ctx.lineWidth=3;
    ctx.stroke();

}); // end window.onload
</script>
</head>
<body>
    <canvas id="canvas" width=200 height=150></canvas>
</body>
</html>