01Canvas

版本支持

最新標(biāo)準(zhǔn):http://www.w3.org/TR/2dcontext/

穩(wěn)定版本的標(biāo)準(zhǔn):http://www.w3.org/TR/2013/CR-2dcontext-20130806/

?{s??vh?^d

注意的知識點:

01浴韭、

用JavaScript創(chuàng)建img對象

第一種方式:

var img = document.getElementById("imgId");

第二種方式:

var img = new Image();//這個就是img標(biāo)簽的dom對象

img.src = "imgs/arc.gif";

img.alt = "文本信息";

img.onload = function() {

//圖片加載完成后疾嗅,執(zhí)行此方法

}

2.1.1 canvas標(biāo)簽語法和屬性 (重點)

canvas:畫布油布的意思 英 ['k?nv?s] 美 ['k?nv?s]

標(biāo)簽名:canvas荣堰,雙標(biāo)簽忧勿,需要閉合。

單位: px许起,可以設(shè)置width和height屬性篡腌,否則忽略單位学歧。

width和hegiht:默認(rèn)300*150像素

注意:

不要用CSS控制它的寬和高,會導(dǎo)致內(nèi)部圖片被拉伸,

重新設(shè)置canvas標(biāo)簽的寬高屬性會讓畫布擦除所有的內(nèi)容茸苇,

可以給canvas畫布設(shè)置背景色

2.1.2 瀏覽器不兼容處理(重點)

ie9以上才支持canvas, 其他chrome排苍、Safari、Opera等都支持

只要瀏覽器兼容canvas学密,那么就會支持絕大部分api(個別最新api除外)

移動設(shè)備幾乎支持Canvas的所有API

2d的支持的都非常好淘衙,3d(webgl)ie11才支持,其他都支持

如果瀏覽器不兼容腻暮,最好進(jìn)行友好提示, 例如:

你的瀏覽器不支持canvas彤守,請升級瀏覽器.瀏覽器不支持,顯示此行文本

如果瀏覽器不兼容哭靖,可以使用flash等方式進(jìn)行替換具垫。

2.2.1 Context:Canvas的上下文、繪制環(huán)境试幽。(重點掌握)

上下文:是所有的繪制操作api的入口或者集合筝蚕。

Canvas自身無法繪制任何內(nèi)容,Canvas的繪圖是使用JS調(diào)用Canvas的接口來完成的。

Context對象就是JavaScript操作Canvas的接口起宽。 *使用[CanvasElement].getContext(‘2d’)來獲取2D繪圖上下文蔗坯。

//獲得畫布

var canvas ?= document.getElementById( 'cavsElem' );

//注意:2d小寫,二維燎含, 3d:webgl

var ctx = canvas.getContext( '2d' );

2.3.2 設(shè)置繪制起點(moveTo)

* 語法:ctx.moveTo(x, y);

* 解釋:設(shè)置上下文繪制路徑的起點宾濒。相當(dāng)于移動畫筆到某個位置

* 參數(shù):x,y 都是相對于 canvas盒子的最左上角。

* 注意:**繪制線段前必須先設(shè)置起點屏箍,不然繪制無效绘梦。**

2.3.3 繪制直線(lineTo)

* 語法:ctx.lineTo(x, y);

* 解釋:從x,y的位置繪制一條直線到起點或者上一個線頭點。

* 參數(shù):x,y 線頭點坐標(biāo)赴魁。

2.3.4 路徑開始和閉合

* 開始路徑:ctx.beginPath();

* 閉合路徑:ctx.closePath();

* 解釋:如果復(fù)雜路徑繪制卸奉,必須使用路徑開始和結(jié)束。閉合路徑會自動把最后的線頭和開始的線頭連在一起颖御。

* beginPath: 核心的作用是將 不同繪制的形狀進(jìn)行隔離榄棵,

每次執(zhí)行此方法,表示重新繪制一個路徑,跟之前的繪制的墨跡可以進(jìn)行分開樣式設(shè)置和管理潘拱。

2.3.5 描邊(stroke)

* 語法:ctx.stroke();

* 解釋:根據(jù)路徑繪制線疹鳄。路徑只是草稿,真正繪制線必須執(zhí)行stroke

* stroke: (用筆等)畫芦岂;輕撫瘪弓;輕挪;敲擊禽最;劃尾槳腺怯;劃掉;(打字時)擊打鍵盤

英 [str??k] ? 美 [strok]

canvas繪制的基本步驟:

第一步:獲得上下文 =>canvasElem.getContext('2d');

第二步:開始路徑規(guī)劃 =>ctx.beginPath()

第三步:移動起始點 =>ctx.moveTo(x, y)

第四步:繪制(點川无、線呛占、面、圖片...) =>ctx.lineTo(x, y)

第五步:閉合路徑 =>ctx.closePath();

第六步:繪制描邊 =>ctx.stroke();

html部分:

當(dāng)前瀏覽器不支持canvas懦趋,請升級瀏覽器版本

javascript部分:

//===============基本繪制api====================

//獲得畫布

var canvas = document.querySelector('#canvas');

//獲得上下文

var ctx = canvas.getContext('2d');

canvas.width = 800; ? ? //設(shè)置標(biāo)簽的屬性寬高

canvas.height = 600;

canvas.style.border = "1px solid #000";

//繪制三角形

ctx.beginPath(); ? ? ? ?//開始路徑

ctx.moveTo(100,100); ? ?//三角形晾虑,左頂點

ctx.lineTo(300, 100); ? //右頂點

ctx.lineTo(300, 300); ? //底部的點

ctx.closePath(); ? ? ? ?//結(jié)束路徑

ctx.stroke(); ? ? ? ? ? //描邊路徑

2.3.6 填充(fill)

* 語法:ctx.fill();

* 解釋:填充,是將閉合的路徑的內(nèi)容填充具體的顏色愕够。默認(rèn)黑色走贪。

2.3.7 快速創(chuàng)建矩形rect()方法

* 語法:ctx.rect(x, y, width, height);

* 解釋:x, y是矩形左上角坐標(biāo), width和height都是以像素計

* rect方法只是規(guī)劃了矩形的路徑惑芭,并沒有填充和描邊坠狡。

* 改造案例:04填充矩形.html

*rect: abbr. 矩形(rectangular);收據(jù)(receipt)

2.3.8 快速創(chuàng)建描邊矩形和填充矩形

* 語法: ctx.strokeRect(x, y, width, height);

- 參數(shù)跟2.3.8相同遂跟,注意此方法繪制完路徑后立即進(jìn)行stroke繪制

* 語法:ctx.fillRect(x, y, width, height);

- 參數(shù)跟2.3.8相同逃沿, 此方法執(zhí)行完成后婴渡。立即對當(dāng)前矩形進(jìn)行fill填充。

2.3.9清除矩形(clearRect)

* 語法:ctx.clearRect(x, y, width, hegiht);

* 解釋:清除某個矩形內(nèi)的繪制的內(nèi)容凯亮,相當(dāng)于橡皮擦边臼。

《2.4 繪制圓形(arc)》

概述:arc() 方法創(chuàng)建弧/曲線(用于創(chuàng)建圓或部分圓)。

語法:ctx.arc(x,y,r,sAngle,eAngle,counterclockwise);

arc: 患傧(度)弧形物柠并;天穹 英 [ɑ?k] 美 [ɑrk]

counter 反擊,還擊富拗;反向移動臼予,對著干;反駁啃沪,回答 ['ka?nt?] 美 ['ka?nt?]

解釋:

x,y:圓心坐標(biāo)粘拾。

r:半徑大小。

sAngle:繪制開始的角度创千。 圓心到最右邊點是0度缰雇,順時針方向弧度增大。

eAngel:結(jié)束的角度追驴,注意是弧度械哟。π

counterclockwise:是否是逆時針。true是逆時針氯檐,false:順時針(默認(rèn))

弧度和角度的轉(zhuǎn)換公式: rad = deg*Math.PI/180;

在Math提供的方法中sin戒良、cos等都使用的弧度

三角函數(shù)的補(bǔ)充

Math.sin(弧度); //夾角對面的邊 和 斜邊的比值

Math.cos(弧度); //夾角側(cè)邊 與斜邊的比值

圓形上面的點的坐標(biāo)的計算公式

x =x0 + Math.cos(rad) * R;//x0和y0是圓心點坐標(biāo)

y =y0 + Math.sin(rad) * R;//注意都是弧度

2.5.1 繪制上下文的文字屬性 (有印象就行了)

2.5.2 上下文繪制文字方法

* ctx.fillText() ? ? ?在畫布上繪制“被填充的”文本

* ctx.strokeText() ? ?在畫布上繪制文本(無填充)

* ctx.measureText() ? 返回包含指定文本寬度的對象

* 單詞:measure 測量体捏;估量冠摄;權(quán)衡 ? 英 ['me??] ? 美 ['m???]

//綜合案例代碼:

ctx.moveTo( 300, 300 );

ctx.fillStyle = "purple"; ? ? ? ? ? ? ? //設(shè)置填充顏色為紫色

ctx.font = '20px "微軟雅黑"'; ? ? ? ? ? //設(shè)置字體

ctx.textBaseline = "bottom"; ? ? ? ? ? ?//設(shè)置字體底線對齊繪制基線

ctx.textAlign = "left"; ? ? ? ? ? ? ? ? //設(shè)置字體對齊的方式

//ctx.strokeText( "left", 450, 400 );

ctx.fillText( "Top-g", 100, 300 ); ? ? ? ?//填充文字

《2.6 繪制圖片(drawImage)》 (重點)

2.6.1 基本繪制圖片的方式

context.drawImage(img,x,y);

參數(shù)說明: x,y 繪制圖片左上角的坐標(biāo), img是繪制圖片的dom對象几缭。

2.6.2 在畫布上繪制圖像河泳,并規(guī)定圖像的寬度和高度

context.drawImage(img,x,y,width,height);

參數(shù)說明:width 繪制圖片的寬度,

height:繪制圖片的高度

如果指定寬高,最好成比例年栓,不然圖片會被拉伸

等比公式: ?toH = Height * toW ? / ?Width;

設(shè)置的高度 = 原高度 * 設(shè)置的寬度 / 原寬度;

2.6.3 圖片裁剪拆挥,并在畫布上定位被剪切的部分

context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

參數(shù)說明:

sx,sy 裁剪的左上角坐標(biāo),

swidth:裁剪圖片的高度某抓。 sheight:裁剪的高度

其他同上

2.6.4 用JavaScript創(chuàng)建img對象

第一種方式:

var img = document.getElementById("imgId");

第二種方式:

var img = new Image();//這個就是 img標(biāo)簽的dom對象

img.src = "imgs/arc.gif";

img.alt = "文本信息";

img.onload = function() {

//圖片加載完成后纸兔,執(zhí)行此方法

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市否副,隨后出現(xiàn)的幾起案子汉矿,更是在濱河造成了極大的恐慌,老刑警劉巖备禀,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洲拇,死亡現(xiàn)場離奇詭異奈揍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赋续,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門男翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纽乱,你說我怎么就攤上這事蛾绎。” “怎么了鸦列?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵秘通,是天一觀的道長。 經(jīng)常有香客問我敛熬,道長肺稀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任应民,我火速辦了婚禮话原,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诲锹。我一直安慰自己繁仁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布归园。 她就那樣靜靜地躺著黄虱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庸诱。 梳的紋絲不亂的頭發(fā)上捻浦,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音桥爽,去河邊找鬼朱灿。 笑死,一個胖子當(dāng)著我的面吹牛钠四,可吹牛的內(nèi)容都是我干的盗扒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼缀去,長吁一口氣:“原來是場噩夢啊……” “哼侣灶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缕碎,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤褥影,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后阎曹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伪阶,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡煞檩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了栅贴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡檐薯,死狀恐怖凝赛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坛缕,我是刑警寧澤墓猎,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站赚楚,受9級特大地震影響毙沾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宠页,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一左胞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧举户,春花似錦烤宙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至供填,卻和暖如春拐云,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捕虽。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工慨丐, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泄私。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像备闲,于是被迫代替她去往敵國和親晌端。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

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

  • 一:canvas簡介 1.1什么是canvas恬砂? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,685評論 2 32
  • 神奇且強(qiáng)大的canvas 一.Canvas的基本介紹 1.什么是Canvas 定義:是HTML5提供的一種新標(biāo)簽,...
    Ainy塵世繁花終凋落閱讀 10,776評論 1 18
  • 一咧纠、canvas簡介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個矩形區(qū)...
    Looog閱讀 3,942評論 3 40
  • 一泻骤、canvas簡介 1.1 什么是canvas漆羔?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個矩形區(qū)...
    J_L_L閱讀 1,517評論 0 4
  • 出塞 王昌齡 秦時明月漢時關(guān) 萬里長征人未還 但使龍城飛將在 不教胡馬度陰山 玉門關(guān)外梧奢,一輪寒月掛在天邊,寒冷的月...
    布衣日行閱讀 2,049評論 0 0