學(xué)習(xí)筆記-Canvas-2017.2.9

HTML5 <canvas> 元素用于圖形的繪制届慈,通過(guò)腳本 (通常是JavaScript)來(lái)完成族壳。<canvas> 標(biāo)簽只是圖形容器憔辫,必須使用腳本來(lái)繪制圖形》戮#可以通過(guò)多種方法使用Canva繪制路徑,盒贰您、圓、字符以及添加圖像拢操。

創(chuàng)建一個(gè)畫布(Canvas)

默認(rèn)情況下 <canvas> 元素沒(méi)有邊框和內(nèi)容枉圃。常需要指定一個(gè)id屬性 (腳本中經(jīng)常引用), width 和 height 屬性定義的畫布的大小。

<canvas id="myCanvas" width="200" height="200" style="border:1px solid #ccc"></canvas>
使用 JavaScript 來(lái)繪制圖像

canvas 元素本身是沒(méi)有繪圖能力的庐冯。所有的繪制工作必須在 JavaScript 內(nèi)部完成孽亲。

1、找到 <canvas> 元素

var c=document.getElementById("myCanvas");

2展父、創(chuàng)建 context 對(duì)象:

var ctx=c.getContext("2d");

getContext("2d") 對(duì)象是內(nèi)建的 HTML5 對(duì)象返劲,擁有多種繪制路徑、矩形栖茉、圓形篮绿、字符以及添加圖像的方法。

3吕漂、繪制一個(gè)紅色的矩形

 ctx.fillStyle="#FF0000";
 ctx.fillRect(0,0,100,90);

設(shè)置fillStyle屬性可以是CSS顏色亲配,漸變,或圖案惶凝。fillStyle 默認(rèn)設(shè)置是#000000(黑色)吼虎。
fillRect(x,y,width,height) 方法定義了矩形當(dāng)前的填充方式。

<canvas id="myCanvas" width="200" height="200" style="border:1px solid #ccc"></canvas>
    <script type="text/javascript">
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    ctx.fillStyle="#FF0000";
    ctx.fillRect(0,0,100,90);
    </script>
Canvas - 坐標(biāo)

canvas 是一個(gè)二維網(wǎng)格苍鲜。canvas 的左上角坐標(biāo)為 (0,0)思灰。畫布的 X 和 Y 坐標(biāo)用于在畫布上對(duì)繪畫進(jìn)行定位。


Canvas - 路徑

1混滔、在Canvas上畫線
moveTo(x,y) 定義線條開(kāi)始坐標(biāo)
lineTo(x,y) 定義線條結(jié)束坐標(biāo)

<canvas id="myCanvas" width="200" height="200" style="border:1px solid #ccc"></canvas>
<script type="text/javascript">
        var c=document.getElementById("myCanvas");
        var ctx=c.getContext("2d");
        ctx.moveTo(0,0);
        ctx.lineTo(100,100);
        ctx.lineTo(80,100);
        ctx.stroke();
    </script>

2洒疚、在canvas中繪制圓形
使用arc(x,y,r,start,stop)

<script type="text/javascript">
        var c=document.getElementById("myCanvas");
        var ctx=c.getContext("2d");
        ctx.beginPath();
        ctx.arc(80,90,30,0,2*Math.PI);
        ctx.stroke();
     </script>
Canvas - 文本

使用 canvas 繪制文本歹颓,重要的屬性和方法如下:
font - 定義字體
fillText(text,x,y) - 在 canvas 上繪制實(shí)心的文本
strokeText(text,x,y) - 在 canvas 上繪制空心的文本

<script type="text/javascript">
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    ctx.font="30px Arial";
    ctx.fillText("Just do it!",30,30);
    ctx.strokeText("Just do it!",60,60);
</script>
Canvas - 漸變

漸變可以填充在矩形, 圓形, 線條, 文本等等, 各種形狀可以自己定義不同的顏色。

以下有兩種不同的方式來(lái)設(shè)置Canvas漸變:
createLinearGradient(x,y,x1,y1) - 創(chuàng)建線條漸變油湖。
createRadialGradient(x,y,r,x1,y1,r1) - 創(chuàng)建一個(gè)徑向/圓漸變巍扛。

1、當(dāng)使用漸變對(duì)象乏德,必須使用兩種或兩種以上的停止顏色撤奸。
2、addColorStop()方法指定顏色停止鹅经,參數(shù)使用坐標(biāo)來(lái)描述寂呛,可以是0至1.
3、使用漸變瘾晃,設(shè)置fillStyle或strokeStyle的值為漸變贷痪,然后繪制形狀,如矩形蹦误,文本劫拢,或一條線。
4强胰、使用 createLinearGradient():

創(chuàng)建一個(gè)線性漸變舱沧。使用漸變填充矩形
<script type="text/javascript">
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    //創(chuàng)建漸變
    var grd=ctx.createLinearGradient(0,0,200,0);
    grd.addColorStop(0,"red");
    grd.addColorStop(1,"black");
    //填充漸變
    ctx.fillStyle=grd;
    ctx.fillRect(10,10,150,80);
</script>
創(chuàng)建一個(gè)徑向/圓漸變。使用漸變填充矩形
<script type="text/javascript">
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    var grd=ctx.createRadialGradient(75,50,5,90,60,100);
    grd.addColorStop(0,"red");
    grd.addColorStop(1,"black");
    ctx.fillStyle=grd;
    ctx.fillRect(10,10,150,80);
</script>
Canvas - 圖像

把一幅圖像放置到畫布上, 使用以下方法:
drawImage(image,x,y)

方法一:

![](#)
<canvas id="myCanvas" width="250" height="300" style="border: 1px solid #ccc;"></canvas>
<script type="text/javascript">
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    var img=document.getElementById("scream");
    img.onload=function(){
        ctx.drawImage(img,10,10);
    }
</script>

方法二:

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #ccc;"></canvas>
<script type="text/javascript">
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    var img=new Image()
    img.src="#"
    ctx.drawImage(img,0,0);
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偶洋,一起剝皮案震驚了整個(gè)濱河市熟吏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玄窝,老刑警劉巖牵寺,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恩脂,居然都是意外死亡帽氓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門俩块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黎休,“玉大人,你說(shuō)我怎么就攤上這事玉凯∈迫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵壮啊,是天一觀的道長(zhǎng)嫉鲸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)歹啼,這世上最難降的妖魔是什么玄渗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮狸眼,結(jié)果婚禮上藤树,老公的妹妹穿的比我還像新娘。我一直安慰自己拓萌,他們只是感情好岁钓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著微王,像睡著了一般屡限。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炕倘,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天钧大,我揣著相機(jī)與錄音,去河邊找鬼罩旋。 笑死啊央,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涨醋。 我是一名探鬼主播瓜饥,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浴骂!你這毒婦竟也來(lái)了乓土?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤溯警,失蹤者是張志新(化名)和其女友劉穎趣苏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體愧膀,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拦键,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檩淋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芬为。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蟀悦,靈堂內(nèi)的尸體忽然破棺而出媚朦,到底是詐尸還是另有隱情,我是刑警寧澤日戈,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布询张,位于F島的核電站,受9級(jí)特大地震影響浙炼,放射性物質(zhì)發(fā)生泄漏份氧。R本人自食惡果不足惜唯袄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜗帜。 院中可真熱鬧恋拷,春花似錦、人聲如沸厅缺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)湘捎。三九已至诀豁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窥妇,已是汗流浹背舷胜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秩伞,地道東北人逞带。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纱新,于是被迫代替她去往敵國(guó)和親展氓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 一:canvas簡(jiǎn)介 1.1什么是canvas脸爱? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,691評(píng)論 2 32
  • 一遇汞、canvas簡(jiǎn)介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    Looog閱讀 3,942評(píng)論 3 40
  • 一簿废、canvas簡(jiǎn)介 1.1 什么是canvas空入?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    J_L_L閱讀 1,520評(píng)論 0 4
  • 書(shū)中代碼示例效果展示:Core HTML5 Canvas Examples 基礎(chǔ)知識(shí) canvas元素 canva...
    szu_bee閱讀 2,841評(píng)論 2 28
  • 一、簡(jiǎn)介 HTML5 中的定義:“它是依賴分辨率的位圖畫布族檬,你可以在 canvas 上面繪制任何圖形歪赢,甚至加載照片...
    destiny0904閱讀 10,549評(píng)論 1 4