1. 程式人生 > >canvas基礎(2)

canvas基礎(2)

算是自己學習做的筆記吧
學習路徑:MDN,canvas教程

座標

在這裡插入圖片描述

繪製矩形

線上繪製,很方便

html部分
<html>
 <body "draw();">
   <canvas id="canvas" width="150" height="150"></canvas>
 </body>
</html>
css部分
canvas{
  border:1px solid pink;
}
javascript部分
function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');
		
    //繪製一個填充的矩形
    ctx.fillRect(25, 25, 100, 100);
    //繪製一個矩形的邊框清除指定矩形區域,讓清除部分完全透明
    ctx.clearRect(45, 45, 60, 60);
    //繪製一個矩形的邊框
    ctx.strokeRect(50, 50, 50, 50);
  }
}
效果

在這裡插入圖片描述

畫個五角星(寬高調成300x300)

function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');
		
    //新建一條路徑
    ctx.beginPath();
    ctx.moveTo(150,0);
    ctx.lineTo(20,300);
    ctx.moveTo(150,0);
    ctx.lineTo(280,300);
    ctx.lineTo(0,100);
    ctx.lineTo(300,100);
    ctx.lineTo(20,300);
    ctx.closePath();
    ctx.stroke();
  }
}

在這裡插入圖片描述

畫圓

arc(x, y, radius, startAngle, endAngle, anticlockwise)
畫一個以(x,y)為圓心的以radius為半徑的圓弧(圓),
從startAngle開始到endAngle結束,(弧度=(Math.PI/180)*角度)
按照anticlockwise給定的方向(預設為順時針false)來生成。

貝塞爾曲線

quadraticCurveTo(cp1x, cp1y, x, y)
繪製二次貝塞爾曲線,cp1x,cp1y為一個控制點,x,y為結束點。

bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
繪製三次貝塞爾曲線,cp1x,cp1y為控制點一,
cp2x,cp2y為控制點二,x,y為結束點。

在這裡插入圖片描述

畫個愛心(寬高調成300x300)

function draw() {
 var canvas = document.getElementById('canvas');
 if (canvas.getContext) {
 var ctx = canvas.getContext('2d');

 // 二次貝塞爾曲線
 ctx.beginPath();
 ctx.moveTo(150,90);
 ctx.quadraticCurveTo(75,25,35,70);
 ctx.quadraticCurveTo(-30,150,140,280);
 ctx.quadraticCurveTo(150,290,160,280);
 ctx.quadraticCurveTo(330,150,265,70);
 ctx.quadraticCurveTo(225,25,265,70);
 ctx.quadraticCurveTo(225,25,150,90);
 ctx.fillStyle="pink";
 ctx.fill();
  }
}

誒嘿嘿嘿

Path2D()物件

Path2D()
Path2D()會返回一個新初始化的Path2D物件
(可能將某一個路徑作為變數——建立一個它的副本,
或者將一個包含SVG path資料的字串作為變數)

new Path2D();     // 空的Path物件
new Path2D(path); // 克隆Path物件
new Path2D(d);    // 從SVG建立Path物件

Path2D.addPath(path [, transform])​
添加了一條路徑到當前路徑(可能添加了一個變換矩陣)

var p = new Path2D("M10 10 h 80 v 80 h -80 Z");
這條路徑將先移動到點 (M10 10) 然後再水平移動80個單位(h 80),
然後下移80個單位 (v 80),接著左移80個單位 (h -80),
再回到起點處 (z)。你可以在Path2D constructor 檢視這個例子

方法

//繪製一個填充的矩形
fillRect(x, y, width, height)

//繪製一個矩形的邊框
strokeRect(x, y, width, height)

//清除指定矩形區域,讓清除部分完全透明。
clearRect(x, y, width, height)

//新建一條路徑,生成之後,圖形繪製命令被指向到路徑上生成路徑
beginPath()

//閉合路徑之後圖形繪製命令又重新指向到上下文中
closePath()

//通過線條來繪製圖形輪廓
stroke()

//通過填充路徑的內容區域生成實心的圖形
fill()

//設定起點
moveTo(x,y)

//移動
lineTo(x,y)

arc(x, y, radius, startAngle, endAngle, anticlockwise)
畫一個以(x,y)為圓心的以radius為半徑的圓弧(圓),
從startAngle開始到endAngle結束,(弧度=(Math.PI/180)*角度)
按照anticlockwise給定的方向(預設為順時針false)來生成。

quadraticCurveTo(cp1x, cp1y, x, y)
繪製二次貝塞爾曲線,cp1x,cp1y為一個控制點,x,y為結束點。

bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
繪製三次貝塞爾曲線,cp1x,cp1y為控制點一,
cp2x,cp2y為控制點二,x,y為結束點。