1. 程式人生 > >html5 新元素和Canvas

html5 新元素和Canvas

(1) HTML5 新元素
自1999年以後HTML 4.01 已經改變了很多,今天,在HTML 4.01中的幾個已經被廢棄,這些元素在HTML5中已經被刪除或重新定義。
為了 更好地處理今天的網際網路應用,HTML5添加了很多新元素及功能,比如: 圖形的繪製多媒體內容,更好的頁面結構,更好的形式 處理,和幾個api拖放元素,定位,包括網頁 應用程式快取,儲存,網路工作者,等。
<canvas> 新元素
標籤 描述
<canvas> 標籤定義圖形,比如圖表和其他影象。該標籤基於 JavaScript 的繪圖 API

HTML5 Canvas
標籤定義圖形,比如圖表和其他影象,您必須使用指令碼來繪製圖形。
什麼是 Canvas? HTML5 元素用於圖形的繪製,通過指令碼 ( 通常是JavaScript)來完成. 標籤只是圖形容器,您必須使用指令碼來繪製圖形。 你可以通過多種方法使用 Canva繪製路徑,盒、圓、字元以及新增影象

一、建立一個畫布(Canvas)
一個畫布在網頁中是一個 矩形框,通過 元素來繪製.
注意: 預設情況下 元素沒有邊框和內容。 簡單例項如下: <canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"> </canvas>
注意: 標籤通常需要指定一個id屬性 (指令碼中經常引用), width 和 height 屬性定義的畫布的大小.
提示:
 你可以在HTML頁面中使用多個 <canvas> 元素. 使用 JavaScript 來繪製圖像 canvas 元素本身是沒有繪圖能力的。 所有的繪製工作必須在 JavaScript 內部完成: <style type="text/css"> #canvas1{ border: 1px solid #000; } </style> <canvas id="canvas1" width="200" height="200"></canvas>
<script type="text/javascript"> 首先,找到 <canvas> 元素: var c = document.getElementById('canvas1'); 然後,建立 context 物件: getContext("2d") 物件是內建的 HTML5 物件,擁有多種繪製路徑、矩形、圓形、字元以及新增影象的方法 var ctx = c.getContext("2d"); 設定fillStyle屬性可以是CSS顏色,漸變,或圖案。fillStyle預設設定是#000000(黑色) ctx.fillStyle="#ff0000"; fillRect( x,y,width,height ) 方法定義了矩形當前的填充方式 ctx.fillRect(0,0,150,75); </script>
講解:
1)getContext() 方法返回一個用於在畫布上繪圖的環境。
Canvas.getContext( contextID )
引數  contextID 指定了您想要在畫布上繪製的型別。 當前唯一的合法值是 "2d",它指定了二維繪圖,並且導致這個方法返回一個環境物件,該物件匯出一個二維繪圖 API。
2) fillStyle 屬性設定或返回用於填充繪畫的顏色、漸變或模式
var c=document.getElementById("myCanvas");var ctx=c.getContext("2d"); var my_gradient=ctx.createLinearGradient(0,0,0,170); my_gradient.addColorStop(0,"black");my_gradient.addColorStop(1,"white"); ctx.fillStyle=my_gradient; ctx.fillRect(20,20,150,100);

3)Canvas 座標 canvas 是一個二維網格。 canvas 的左上角座標為 (0,0) 上面的 fillRect 方法擁有引數 (0,0,150,75)。 意思是:在畫布上繪製 150x75 的矩形,從左上角開始 (0,0)。
4)Canvas - 路徑 在Canvas上畫線,我們將使用以下兩種方法:
  • moveTo(x,y) 定義線條開始座標
  • lineTo(x,y) 定義線條結束座標
繪製線條我們必須使用到 "ink" 的方法,就像stroke().
四、在 canvas中繪製圓形, 我們將使用以下方法:
  • arc(x,y,r,start,stop)
實際上我們在繪製圓形時使用了 "ink" 的方法, 比如 stroke() 或者 fill().
<body> <h3>建立一個畫布</h3> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #000"></canvas> <canvas id="canvas1" width="200" height="200"></canvas> <script type="text/javascript"> var c = document.getElementById('canvas1'); var ctx = c.getContext("2d"); //繪製一個圓形 ctx.beginPath(); ctx.arc(95, 50, 40, 1.0*Math.PI, 1.5 * Math.PI); ctx.stroke(); </script> </body>
arc() 方法建立弧/曲線(用於建立圓或部分圓)。 提示 如需通過 arc() 來建立圓,請把起始角設定為 0,結束角設定為 2*Math.PI。 提示:請使用  stroke() 或  fill() 方法在畫布上繪製實際的弧。
  • 中心:arc(100,75,50,0*Math.PI,1.5*Math.PI)
  • 起始角:arc(100,75,50,0,1.5*Math.PI)
  • 結束角:arc(100,75,50,0*Math.PI,1.5*Math.PI)


context.arc( x, y, r, sAngle, eAngle, counterclockwise);
引數值
引數 描述
x 圓的中心的 x 座標。
y 圓的中心的 y 座標。
r 圓的半徑。
sAngle 起始角,以弧度計。(弧的圓形的三點鐘位置是 0 度)。
eAngle 結束角,以弧度計。
counterclockwise 可選。規定應該逆時針還是順時針繪圖。False = 順時針,true = 逆時針。



五、Canvas - 文字 使用 canvas 繪製文字,重要的屬性和方法如下:
  • font - 定義字型
  • fillText(text,x,y) - 在 canvas 上繪製實心的文字
  • strokeText(text,x,y) - 在 canvas 上繪製空心的文字
使用 fillText():
var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.font="30px Arial"; ctx.fillText("Hello World",10,50); ctx.strokeText("Hello World",10,50);
Canvas -  漸變 漸變可以填充在矩形, 圓形, 線條, 文字等等, 各種形狀可以自己定義不同的顏色。 以下有兩種不同的方式來設定Canvas漸變:
  • createLinearGradient(x,y,x1,y1) - 建立線條漸變
  • createRadialGradient(x,y,r,x1,y1,r1) - 建立一個徑向/圓漸變
當我們使用 漸變物件,必須使用 兩種或兩種以上的停止顏色。 addColorStop()方法指定顏色停止,引數使用座標來描述,可以是0至1. 使用漸變,設定fillStyle或strokeStyle的值為漸變,然後繪製形狀,如矩形,文字,或一條線。 使用 createLinearGradient():
addColorStop() 方法規定 gradient 物件中的顏色和位置。 addColorStop() 方法與  createLinearGradient() 或  createRadialGradient() 一起使用。 註釋:您可以多次呼叫 addColorStop() 方法來改變漸變。如果您不對 gradient 物件使用該方法,那麼漸變將不可見。為了獲得可見的漸變,您需要建立至少一個色標。

createLinearGradient() 方法建立線性的漸變物件。 漸變可用於填充矩形、圓形、線條、文字等等。 提示:請使用該物件作為  strokeStyle 或  fillStyle 屬性的值。 提示:請使用  addColorStop() 方法規定不同的顏色,以及在 gradient 物件中的何處定位顏色。
context.createLinearGradient( x0, y0, x1, y1);
引數 描述
x0 漸變開始點的 x 座標
y0 漸變開始點的 y 座標
x1 漸變結束點的 x 座標
y1 漸變結束點的 y 座標


strokeStyle 屬性設定或返回用於筆觸的顏色、漸變或模式。

var c=document.getElementById("myCanvas");var ctx=c.getContext("2d");var gradient=ctx.createLinearGradient(0,0,170,0);gradient.addColorStop("0","magenta");gradient.addColorStop("0.5","blue");gradient.addColorStop("1.0","red"); // 用漸變進行填充 ctx.strokeStyle=gradient; ctx.lineWidth=5;ctx.strokeRect(20,20,150,100);


var c=document.getElementById("myCanvas");var ctx=c.getContext("2d");ctx.font="30px Verdana"; // 建立漸變 var gradient=ctx.createLinearGradient(0,0,c.width,0);gradient.addColorStop("0","magenta");gradient.addColorStop("0.5","blue");gradient.addColorStop("1.0","red"); // 用漸變進行填充 ctx.strokeStyle=gradient;ctx.strokeText("Big smile!",10,50);


<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Canvas</title> <style type="text/css"> #canvas3, #canvas4 { border: 1px solid #000; } </style> </head>
<body> <h3>建立一個畫布</h3> <canvas id="canvas3" width="200" height="100"></canvas> <canvas id="canvas4" width="200" height="100"></canvas> <script type="text/javascript"> //線性漸變 var cline = document.getElementById('canvas3'); var ctx2 = cline.getContext("2d"); var grd = ctx2.createLinearGradient(0, 0, 200, 0); grd.addColorStop(0, "red"); grd.addColorStop(1, "white"); ctx2.fillStyle=grd; ctx2.fillRect(10,10,150,80);
//映象漸變 var cline1 = document.getElementById('canvas4'); var ctx3 = cline1.getContext("2d"); var grd1 = ctx3.createRadialGradient(75,50,5,90,60,100); grd1.addColorStop(0, "red"); grd1.addColorStop(1, "white"); ctx3.fillStyle=grd1; ctx3.fillRect(10,10,150,80); </script> </body> </html>


新多媒體元素
標籤 描述
<audio> 定義音訊內容
<video> 定義視訊(video 或者 movie)
<source> 定義多媒體資源 <video> 和 <audio>
<embed> 定義嵌入的內容,比如外掛。
<track> 為諸如 <video> 和 <audio> 元素之類的媒介規定外部文字軌道。


新表單元素
標籤 描述
<datalist> 定義選項列表。請與 input 元素配合使用該元素,來定義 input 可能的值。
<keygen> 規定用於表單的金鑰對生成器欄位。
<output> 定義不同型別的輸出,比如指令碼的輸出。


新的語義和結構元素 HTML5提供了新的元素來建立更好的頁面結構:
標籤 描述
<article> 定義頁面獨立的內容區域。
<aside> 定義頁面的側邊欄內容。
<bdi> 允許您設定一段文字,使其脫離其父元素的文字方向設定。
<command> 定義命令按鈕,比如單選按鈕、複選框或按鈕
<details> 用於描述文件或文件某個部分的細節
<dialog> 定義對話方塊,比如提示框
<summary> 標籤包含 details 元素的標題
<figure> 規定獨立的流內容(影象、圖表、照片、程式碼等等)。
<figcaption> 定義 <figure> 元素的標題
<footer> 定義 section 或 document 的頁尾。
<header> 定義了文件的頭部區域
<mark> 定義帶有記號的文字。
<meter> 定義度量衡。僅用於已知最大和最小值的度量。
<nav> 定義執行中的進度(程序)。
<progress> 定義任何型別的任務的進度。
<ruby> 定義 ruby 註釋(中文註音或字元)。
<rt> 定義字元(中文註音或字元)的解釋或發音。
<rp> 在 ruby 註釋中使用,定義不支援 ruby 元素的瀏覽器所顯示的內容。
<section> 定義文件中的節(section、區段)。
<time> 定義日期或時間。
<wbr> 規定在文字中的何處適合新增換行符。