canvas

什么是 canvas?

HTML5 的 Canvas 元素使用 JavaScript 在網(wǎng)頁(yè)上繪制圖像拳芙。
畫(huà)布是一個(gè)矩形區(qū)域,你可以控制其每一像素僵驰。
canvas 擁有多種繪制路徑垢箕、矩形、圓形、字符以及添加圖像的方法狮鸭。

創(chuàng)建 Canvas 元素

向 HTML5 頁(yè)面添加 Canvas 元素合搅。
規(guī)定元素的 id、寬度和高度:(相當(dāng)于我們創(chuàng)建了一塊畫(huà)布~)

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
</canvas>

通過(guò) JavaScript 來(lái)繪制

Canvas 元素本身是沒(méi)有繪圖能力的歧蕉。所有的繪制工作必須在 JavaScript 內(nèi)部完成:

//首先灾部,找到 <canvas> 元素:
var c=document.getElementById("myCanvas");
//然后,獲取2d上下文對(duì)象
var ctx = c.getContext("2d");

//getContext("2d") 對(duì)象是內(nèi)建的 HTML5 對(duì)象惯退,擁有多種繪制路徑赌髓、矩形、圓形催跪、字符以及添加圖像的方法锁蠕。

//下面的兩行代碼繪制一個(gè)紅色的矩形:
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
//設(shè)置fillStyle屬性可以是CSS顏色,漸變懊蒸,或圖案荣倾。fillStyle 默認(rèn)設(shè)置是#000000(黑色)。

//fillRect(x,y,width,height) 方法定義了矩形當(dāng)前的填充方式骑丸。

Canvas 坐標(biāo)

canvas 是一個(gè)二維網(wǎng)格舌仍。
canvas 的左上角坐標(biāo)為 (0,0)
上面的 fillRect 方法擁有參數(shù) (0,0,150,75)。
意思是:在畫(huà)布上繪制 150x75 的矩形通危,從左上角開(kāi)始 (0,0)铸豁。


x y.png

下面是一些方法

1. 開(kāi)啟新路徑

ctx.beginPath();

2. 起始點(diǎn)

x是橫坐標(biāo),y是縱坐標(biāo)
ctx.moveTo(x, y);

3. 路徑

x是橫坐標(biāo)菊碟,y是縱坐標(biāo)
ctx.lineTo(x, y)

4. 閉合路徑

ctx.closePath()

5. 描邊與填充

ctx.stroke();//線條類(lèi)的使用
ctx.fill();//形狀類(lèi)的使用

6. 設(shè)置描邊和填充的顏色

ctx.strokeStyle = '顏色';
ctx.fillStyle = '顏色';

7. 清除畫(huà)布

ctx.clearRect(x, y, width, height);

8.文本

font - 定義字體
fillText(text,x,y) - 在 canvas 上繪制實(shí)心的文本
strokeText(text,x,y) - 在 canvas 上繪制空心的文本
ctx.textAlign 文本水平對(duì)齊方式:left right center
ctx.textBaseline 文本垂直對(duì)齊方式:top middel bottom
如:

ctx.font="30px Arial";//使用 "Arial" 字體在畫(huà)布上繪制一個(gè)高 30px 的文字
ctx.fillText("Hello World",10,50);//(實(shí)心)
ctx.strokeText("Hello World",10,50);//(空心)
線的樣式
  1. 線的寬度
    ctx.lineWidth = 線的寬度

  2. 線帽(線條兩端是什么樣子)
    ctx.lineCap = 'butt'默認(rèn)
    round: 半圓
    square: 方形

圓心:x, y
blur: 半徑
start,end: 起始角度节芥,結(jié)束角度
boolean: 是否為逆時(shí)針(true), 默認(rèn)順時(shí)針(false))(可選)
ctx.arc(x, y, blur, start, end, boolean)

cxt.arc(500,210,100,0,2*Math.PI);//PI就是圓周率π,PI是弧度制的π,也就是180°
所以逆害,Math.PI = 3.14 = 180°
漸變

漸變可以填充在矩形, 圓形, 線條, 文本等等, 各種形狀可以自己定義不同的顏色藏古。
以下有兩種不同的方式來(lái)設(shè)置Canvas漸變:
· createLinearGradient(x1, y1, x2, y2) 創(chuàng)建線性漸變
接受 4 個(gè)參分別表示漸變的起點(diǎn) (x1,y1) 與終點(diǎn) (x2,y2)。
· createRadialGradient(x1, y1, r1, x2, y2, r2) 創(chuàng)建一個(gè)徑向/圓漸變
接受 6 個(gè)參數(shù)忍燥,前三個(gè)定義一個(gè)以 (x1,y1) 為原點(diǎn)拧晕,半徑為 r1 的圓,后三個(gè)參數(shù)則定義另一個(gè)以 (x2,y2) 為原點(diǎn)梅垄,半徑為 r2 的圓厂捞。
示例:
var lineargradient = ctx.createLinearGradient(0,0,150,150);
var radialgradient = ctx.createRadialGradient(75,75,0,75,75,100);
當(dāng)我們使用漸變對(duì)象输玷,必須使用兩種或兩種以上的停止顏色。

addColorStop()方法指定顏色停止靡馁,參數(shù)使用坐標(biāo)來(lái)描述欲鹏,可以是0至1.

使用漸變,設(shè)置fillStyle或strokeStyle的值為 漸變臭墨,然后繪制形狀赔嚎,如矩形,文本胧弛,或一條線尤误。


// 創(chuàng)建漸變
var grd=ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
 
// 填充漸變
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市结缚,隨后出現(xiàn)的幾起案子损晤,更是在濱河造成了極大的恐慌,老刑警劉巖红竭,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尤勋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡茵宪,警方通過(guò)查閱死者的電腦和手機(jī)最冰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稀火,“玉大人锌奴,你說(shuō)我怎么就攤上這事『豆桑” “怎么了鹿蜀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)服球。 經(jīng)常有香客問(wèn)我茴恰,道長(zhǎng),這世上最難降的妖魔是什么斩熊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任往枣,我火速辦了婚禮,結(jié)果婚禮上粉渠,老公的妹妹穿的比我還像新娘分冈。我一直安慰自己,他們只是感情好霸株,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布雕沉。 她就那樣靜靜地躺著,像睡著了一般去件。 火紅的嫁衣襯著肌膚如雪坡椒。 梳的紋絲不亂的頭發(fā)上扰路,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音倔叼,去河邊找鬼汗唱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛丈攒,可吹牛的內(nèi)容都是我干的哩罪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼巡验,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼际插!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起深碱,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腹鹉,失蹤者是張志新(化名)和其女友劉穎藏畅,沒(méi)想到半個(gè)月后敷硅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愉阎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年绞蹦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榜旦。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幽七,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溅呢,到底是詐尸還是另有隱情澡屡,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布咐旧,位于F島的核電站驶鹉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铣墨。R本人自食惡果不足惜室埋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伊约。 院中可真熱鬧姚淆,春花似錦、人聲如沸屡律。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)超埋。三九已至上忍,卻和暖如春骤肛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窍蓝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工腋颠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吓笙。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓淑玫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親面睛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子絮蒿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一、canvas簡(jiǎn)介 1.1 什么是canvas叁鉴?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    J_L_L閱讀 1,516評(píng)論 0 4
  • 驗(yàn)證瀏覽器是否支持 Your browser does not support HTML5 Canvas. f...
    shuaiutopia閱讀 2,633評(píng)論 0 0
  • ??HTML5 添加的最受歡迎的功能就是 元素幌墓。這個(gè)元素負(fù)責(zé)在頁(yè)面中設(shè)定一個(gè)區(qū)域但壮,然后就可以通過(guò) JavaScri...
    霜天曉閱讀 3,010評(píng)論 0 2
  • 你說(shuō)一一 在你聽(tīng)完了那段陌生的故事后,你說(shuō)一一 我不習(xí)慣初次見(jiàn)面的表白常侣,還有 你至少該洗凈了酒味再來(lái)蜡饵。 但是,這并...
    4f427883ff9e閱讀 155評(píng)論 1 0
  • 寫(xiě)在前面??本學(xué)習(xí)教程所有示例代碼見(jiàn)GitHub:https://github.com/selfconzrr/Re...
    Lseafood閱讀 224評(píng)論 0 0