1. 程式人生 > 實用技巧 >前端之canvas詳解(一)——線條的各種畫法

前端之canvas詳解(一)——線條的各種畫法

一、什麼是canvas?

canvas是h5新增的標籤。由 HTML 程式碼配合高度和寬度屬性而定義出的可繪製區域。簡單的來說就是一塊畫布。

新增的標籤,所以它是有相容性問題的。 Mozilla 程式從 Gecko 1.8 (Firefox 1.5) 開始支援 <canvas>, Internet Explorer 從 IE9 開始 <canvas> 。Chrome 和 Opera 9+ 也支援 <canvas>

二、canvas的使用。

在html檔案的<body></body>標籤中書寫canvas標籤。並限定畫布的大小(不設寬高的話,預設寬300px,高150px),由於有一部分瀏覽器並不支援canvas標籤,所以在標籤里加入的替換的內容,當瀏覽器不顯示canvas標籤時,會有替換的內容做提示用。

<body>
    <canvas id="canvas" width="300" height="300">
        <span>你的瀏覽器不支援 canvas,請升級你的瀏覽器。</span>
    </canvas>
</body>

接著我們需要用js對canvas進行繪畫。需要先獲取canvas元素,如下:

var canvas = document.getElementById('canvas');   //  獲取canvas標籤
var ctx = canvas.getContext('2d');  // 建立內容物件

 if (!canvas.getContext) return; // 畫圖判斷,如果不能畫,自動結束

getContext("2d") 物件是內建的 HTML5 物件,擁有多種繪製路徑、矩形、圓形、字元以及新增影象的方法。我們先在js檔案裡畫一條直線:

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
    if (!canvas.getContext) return; 
  
    ctx.moveTo(0,0);  // 指定線的起點 ,moveTo的兩個引數依次代表x軸座標,y軸座標。
    ctx.lineTo(200,100);  // 指定線的下一點 ,lineTo的兩個引數依次代表x軸座標,y軸座標。
    ctx.stroke();  // 把剛才的路徑以線條的方式展示出來
  //   在此處可以接著畫出更多內容
}

draw()

得到如圖所示的一條斜線:

解釋一下上面的位置座標,現在我們設定的畫布寬和高都是300,(0,0)就相當於畫布的左上角,(300,300)就相當於畫布的右下角。

畫一條寬度為10的線:

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
      if (!canvas.getContext) return; 
  
    ctx.moveTo(100,100);  
    ctx.lineTo(200,100);  
    ctx.lineWidth = 10;  //設定線的寬度10px;
    ctx.stroke();  
}

draw()

設定線的端點的樣子和線條顏色:

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
      if (!canvas.getContext) return; 
  
    ctx.moveTo(100,100);  
    ctx.lineTo(200,100);  
    ctx.lineWidth = 10; 
   ctx.lineCap="round"; // 此處設定以圓形結束,"butt", "round", "square"可以自己試一試。
    ctx.strokeStyle="blue" ; //設定線條的顏色,如果不設定,預設填充黑色
    ctx.stroke();  
}

draw()

畫虛線:用 setLineDash 方法和 lineDashOffset 屬性來制定虛線樣式。 setLineDash 方法接受一個數組,來指定線段與間隙的交替;lineDashOffset屬性設定起始偏移量。

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
      if (!canvas.getContext) return; 
  
    ctx.setLineDash([20, 5]);  // [實線長度, 間隙長度]
    ctx.lineDashOffset = -0;
    ctx.strokeRect(50, 50, 210, 210);
}

draw()

畫連續兩條直線:

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
      if (!canvas.getContext) return; 
  
    ctx.moveTo(100,100);  
    ctx.lineTo(150,150);  
    ctx.lineTo(200,100);  
    ctx.stroke();  
}

draw()

畫一個三角形:

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
      if (!canvas.getContext) return; 
  
  // 第一條路徑
    ctx.beginPath(); //新建一條path
     ctx.moveTo(100,100);  
    ctx.lineTo(150,150);  
    ctx.lineTo(200,100); 
    ctx.closePath(); // 結束這條路徑。這時候會把起點和終點連線起來。
    ctx.stroke();  
}

draw()

你會發現這次畫直線多了ctx.beginPath();ctx.closePath();這樣的話就可以自動首尾相連,成為一個閉合的圖形,當然,你直接畫一條線把首尾連線起來也可以。

可以給三角形填充顏色:

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
      if (!canvas.getContext) return; 
  
  // 第一條路徑
    ctx.beginPath(); //新建一條path
    ctx.moveTo(100,100);  
    ctx.lineTo(150,150);  
    ctx.lineTo(200,100);  
    ctx.closePath(); // 結束這條路徑。這時候會把起點和終點連線起來。
    ctx.stroke();  
   ctx.fill(); //填充閉合區域。如果path沒有閉合,則fill()會自動閉合路徑。
}

draw()

填充我們自定義顏色

function draw(){
    var canvas = document.getElementById('canvas');  
    var ctx = canvas.getContext('2d'); 
      if (!canvas.getContext) return; 
  
  // 第一條路徑
    ctx.beginPath(); 
    ctx.moveTo(0,40);  
    ctx.lineTo(200,40);  
    ctx.lineTo(200,60);   
    ctx.closePath(); 
    ctx.strokeStyle="blue";
    ctx.stroke();  
  
   ctx.fillStyle="red"; //設定填充的顏色,如果不設定,預設填充黑色
   ctx.fill(); 
}

draw()

本文首發今日頭條,有興趣可在頭條搜尋使用者,洛海之音