>
>準備好帆布,我們可以開始嘗試使用帆布API。但是在此之前,讓我們澄清一下畫布功能的更多方面。
> html5帆布元素尺寸與圖形尺寸
除了畫布元素的寬度和高度屬性外,您還可以使用CSS設置帆布元素的大小。但是,用CSS對畫布元素進行調整與設置元素的寬度和高度屬性不同。這是因為畫布實際上具有兩種尺寸:元素本身的大小和元素的繪圖表面的大小。
設置元素的寬度和高度屬性時,您可以設置元素的大小和元素繪圖表面的大小;但是,當您使用CSS尺寸大小畫布元素時,您僅設置元素的尺寸而不是繪圖表面。當帆布元素的大小與其圖表面的大小不符時,瀏覽器會縮放圖表以適合元素。因此,最好將Canvas Element的寬度和高度屬性用於大小元素而不是使用CSS,這是一個好主意。
了解帆布坐標系
在2D空間中,使用X和Y坐標引用位置。 X軸水平延伸,Y軸垂直延伸。該中心的位置x = 0,y = 0,也可以表示為(0,0)。這種定位對象的定位方法(用於數學中)被稱為笛卡爾坐標系。
但是,畫布坐標係將原點放置在畫布的左上角,x坐標向右增加,y坐標朝向畫布的底部。因此,與標準的笛卡爾坐標空間不同,畫布空間沒有明顯的負點。使用負坐標不會導致您的應用程序失敗,但是使用負坐標點定位的對像不會出現在頁面上。
>基本畫布示例
如前所述,HTML5畫布讓您創建多種類型的對象,包括線,曲線,路徑,形狀,文本等。在示例中,您可以看到其中的某些對象實際上是如何繪製的。我不會在帆布API上進行廣泛的詳細信息;這些只是一些容易幫助您了解帆佈如何工作的感覺。
>
繪圖線
繪製一條線,我們使用四個帆布API方法。我們從BeginPath()方法開始,該方法指示瀏覽器準備繪製新路徑。接下來,我們使用Moveto(X,Y)方法來設置該行的起點。然後lineto(x,y)方法設置了終點,並通過連接兩個點來繪製線路。
在這一點上,該線將被繪製,但仍然是看不見的。為了使其可見,我們使用stroke()方法顯示默認黑色的行。
請參見codepen上的sitepoint(@sitepoint)的筆帆佈線示例。
繪製矩形
要繪製矩形,我們可以使用fillRect(x,y,width,高度)方法來設置坐標和尺寸,以及填充屬性來設置填充顏色。 <span><span><span><canvas</span> id<span>="exampleCanvas"</span> width<span>="500"</span> height<span>="300"</span>></span>
</span>
<span><!-- OPTION 1: leave a message here if browser doesn't support canvas -->
</span> <span><span><span><p</span>></span>Your browser doesn’t currently support HTML5 Canvas.
</span> Please check caniuse.com/#feat=canvas for information on
browser support for canvas.<span><span><span></p</span>></span>
</span>
<span><!-- OPTION 2: put fallback content (text, image, Flash, etc.)
</span><span> if the browser doesn't support canvas -->
</span>
<span><span><span></canvas</span>></span></span>
。
請參見codepen上的sitepoint(@sitepoint)的筆帆布矩形示例。
請注意,矩形位於左上角附近。 >
繪製文本
<span>var canvas = document.getElementById('exampleCanvas'),
</span> context <span>= canvas.getContext('2d');
</span>
<span>// code examples will continue here...</span>
>要在畫布上繪製文本,我們可以使用fillText(字符串,x,y)以及字體屬性來設置文本的字體,大小和样式(類似於CSS中的字體速記)。 >
請參閱codepen上的sitepoint(@sitepoint)的筆帆布文本示例。
>您應該知道,儘管使用HTML5 Canvas API簡單繪圖很容易,但是創建複雜的形狀和動畫需要一些數學和物理知識。關於該主題的最好的書之一是帶有JavaScript的Foundation HTML5動畫。這本書是學習將事物從簡單到復雜的動畫移動的絕佳資源。
>
在哪裡可以了解更多?
>
如果您想在這裡學習,有一些資源:
帆布教程 - 關於MDN的出色教程,充滿了示例,插圖和詳細的解釋。 -
> html5帆布元素指南 - 六個修訂版的初學者教程。 -
> HTML5帆布教程 - Kineticjs Canvas庫的創建者Eric Rowell創建的完整教程。所有示例都是互動的。您可以與他們一起玩並立即查看結果。 - >
加快畫布開發
>使用“ RAW” HTML5 CANVAS API可能是一項繁瑣的工作。這就是為什麼您可以很好地學習它可以切換到一個可以加快速度並使您的畫布開髮變得更加容易的好帆布庫時的好主意。 >
以下是一些流行的選擇:
kineticjs -
paper.js -
easeljs -
> Fabric.js -
> ocanvas-
>加快HTML5畫布開發的另一種方法是將Adobe Illustrator的Ai-> Canvas插件使用。您可以在SitePoint上的本文中找到插件的概述。 >
結論
就是這樣。我希望此介紹性的HTML5 Canvas教程為您提供了一個很好的起點,可以繼續學習和探索這項強大的技術。
關於HTML5畫布的常見問題(常見問題解答)
> SVG和HTML5 Canvas? SVG(可擴展的向量圖形)和HTML5帆布是用於創建圖形的Web技術的什麼區別。但是,它們的方法和用例有所不同。 SVG是一種基於向量的方法,其中每個繪製的形狀都被記住為對象。如果更改對象的屬性,則瀏覽器可以自動重新渲染場景。 SVG非常適合交互式圖形和元素動畫。另一方面,HTML5畫布是基於像素的。一旦繪製形狀,系統就會忘記。如果其屬性更改,則必須與整個場景一起重新繪製。這使得帆布非常適合圖形密集型遊戲或諸如照片編輯軟件之類的應用程序。 >如何將文本添加到帆布? >將文本添加到畫布中很簡單。您可以使用fillText(text,x,y)方法,其中文本是要編寫的字符串,而x和y是文本啟動的坐標。您還可以使用字體和填充屬性自定義文本的字體,尺寸和顏色。
>我可以使用HTML5畫布進行遊戲開發嗎?它的基於像素的本質使其適合於在瀏覽器中平穩運行的複雜和圖形密集型遊戲。但是,對於3D遊戲,也使用帆布API的WebGL由於其硬件加速度功能而成為一個更好的選擇。
如何使用HTML5 Canvas?提供了幾種繪製形狀的方法。例如,要繪製矩形,您可以使用fillRect(x,y,width,高度)方法。要繪製一個圓圈,您可以使用弧(X,Y,RADIUS,Startangle,disgangle)方法。您還可以使用路徑來繪製複雜的形狀。
>如何使用HTML5帆布對對象進行動畫化?第二。每個redraw稱為幀,對對象的屬性的更改是在框架之間進行的,以產生運動的幻覺。這通常是使用requestAnimationFrame()方法進行的。
>我可以與在帆布上繪製的對象進行交互?
與SVG不同,HTML5畫布一旦繪製對象就不記得它們。這意味著您不能直接將事件處理程序附加到他們。但是,您可以通過跟踪javaScript中對象的屬性並在發生交互時重新繪製畫布來實現交互。使用Todataurl()方法將畫布的內容保存為圖像。此方法返回包含由類型參數指定的格式表示圖像表示的數據URL(默認為png)。
我如何清除帆布? 您可以清除整個整個使用透明處理(x,y,寬度,高度)方法的畫布。要清除整個畫布,您可以將x和y設置為0,將寬度和高度設置為帆布的寬度和高度。 >
我可以在所有瀏覽器中使用HTML5畫布嗎?在所有現代瀏覽器中都支持帆布,包括Chrome,Firefox,Safari,Opera和Edge。但是,Internet Explorer 8或更早的Internet Explorer中不支持它。 >我如何處理HTML5 Canvas中的錯誤? >
>通常使用JavaScript中的try-catch塊來完成HTML5畫布中的錯誤處理。但是,由於畫布是低級API,因此不提供詳細的錯誤消息。因此,調試可能具有挑戰性,並且通常涉及大量的反複試驗。 >