Canvas----transform,fillStyle,arcTo,font百姓,measureText(string).width,clip(),clearRect

重寫Context:http://www.imooc.com/video/4324/0

https://www.w3.org/TR/2dcontext/


圖形庫:http://artisanjs.com/忠藤;http://www.rgraph.net/


參考:http://www.imooc.com/video/2434/0

一個Bug:經(jīng)常遇到設(shè)置margin:0 auto但不居中的情況禁熏,加一句display:block肄程。

1.并不是基于對象繪制贯钩,而是基于狀態(tài)context;

2.moveTo是將筆尖挪到某個位置畜份,lineTo是將兩點的位置做連接诞帐,fillStyle和strokeStyle也是對狀態(tài)的描述, stroke(),fill()是真正的繪制爆雹。

3.beginPath(),聲明一個路徑的開始停蕉;closePath()表示當(dāng)前的路徑要被封閉,同時也結(jié)束钙态;繪制封閉多邊形時慧起,建議成對使用這兩個,會自動幫我們處理好封閉結(jié)尾驯绎。

4.當(dāng)我們需要繪制一個需要描邊的填充色的時候完慧,我們應(yīng)該先填充,再描邊剩失。如果先描邊屈尼,再填充,填充色會覆蓋1/2的lineWidth拴孤。

5.繪制矩形的封裝函數(shù):

rect(x,y,width,height):勾繪一個矩形的邊框路徑;fillRect(x,y,width,height):具體的繪制一個填充的矩形;strokeRect(x,y,width,height):繪制一個帶有邊框的矩形;

6.如果前后繪制的圖形有重疊脾歧,后繪制的圖像會遮擋前面繪制的圖像。注意是遮擋不是覆蓋演熟。

7.線條屬性:

lineCap:butt(default),round,squre????? round(圓“帽子”)和squre(方“帽子”)對比默認的butt多出來一小截"圓頭"和"方頭"鞭执。

lineJoin:miter(default),bevel,round???? miter:永遠呈現(xiàn)一個尖角的形狀司顿,它說明了兩條線段的外邊緣一直擴展到它們相交。當(dāng)兩條線段以一個銳角相交兄纺,斜角連接可能變得很長大溜,還有一個屬性miterLimit(直接查看文檔);bevel:說明頂點的外邊緣應(yīng)該和一個填充的三角形相交(可以理解為miter的尖角折疊下來)估脆;round:圓角的形式钦奋,說明頂點的外邊緣應(yīng)該和一個填充的弧接合,這個弧的直徑等于線段的寬度疙赠。描述:當(dāng)一個路徑包含了線段和曲線相交的交點的時候付材,lineJoin屬性說明如何繪制這些交點。只有當(dāng)繪制具有寬度的線條的時候圃阳,這一屬性的效果才能表現(xiàn)出來厌衔。

(一)transform

變換矩陣

使用transform設(shè)置變換矩陣,每次設(shè)置是在之前的變換矩陣的基礎(chǔ)上進行設(shè)置的捍岳,transform設(shè)置變換矩陣可以產(chǎn)生級聯(lián)的關(guān)系富寿,每次的變換效果是一次一次的附加在之前的效果上的。

可以用setTransform(1,0,0,1,0,0)使之前的transform失效锣夹,只使用當(dāng)前setTransform的值作喘。


(二)fillStyle:Linear Gradient(線性漸變),Radial Gradient(徑向漸變),createPattern

fillStyle=color

#ffffff;#642晕城;rgb(255,128,0);rgba(100,100,100,0.8);hsl(20,62%,28%);hsla(40,82%,33%,0.6);red

(1)線性漸變

step1

var grd=context.createLinearGradient(xstart,ystart,xend,yend);

Step2

grd.addColorStop(stop,color);//可以添加無數(shù)個,用來設(shè)置起始點到終點的顏色

context.fillStyle=grd;

注意:如果漸變色只填充了畫布的一部分窖贤,那么剩下部分用最后的顏色填充砖顷。如果超出畫布,會有部分顏色不顯示赃梧。

(2)徑向漸變

Step 1

var grd=context.createRadialGradient(x0,y0,r0,x1,y1,r1);

Step2

grd.addColorStop(stop,color);

(3)fillStyle=img || canvas || video

createPattern:

①createPattern(img,repeat-style)

repeat-style:no-repeat/repeat-x/repeat-y/repeat

②createPattern(canvas,repeat-style)


(三)arcTo(x1,y1,x2,y2,radius):另一種弧線繪制方法:http://www.imooc.com/video/4217

弧線繪制的起點是(x0,y0)滤蝠,但切點可能使任意一點。(x0,y0)到(x1,y1)及(x1,y1)到(x2,y2)只是輔助線授嘀,切點也可能在輔助線的延長線上物咳。

③createPattern(video,repeat-style)


(四)貝塞爾曲線? Bezier:

貝塞爾二次曲線:QuadraticCurveTo:tinyurl.com/html5quadratic

context.moveTo(x0,y0);//起始點

context.quadraticCurveTo(x1,y1,x2,y2);//控制點和結(jié)束點

貝塞爾三次曲線:BezierCurveTo:tinyurl.com/html5bezier

context.moveTo(x0,y0);//起始點

content.bezierCurveTo(x1,y1,x2,y2,x3,y3);//兩個控制點和結(jié)束點


(五)font,默認值:"20px sans-serif"

文字渲染基礎(chǔ):context.font="bold 40px Arial";context.fillText(String,x,y,[maxlen]);或者 context.strokeText(String,x,y,[maxlen]);//String是要添加的字符串蹄皱,x,y是要添加的位置,[maxlen]描述的是我們要繪制這行文字览闰,所可以使用的最長寬度是多少,也可不寫巷折。

context.font=font-style font-variant font-weight font-size font-family

font-style:normal(Default)??????? italic(斜體字)????? oblique(傾斜字體)

同時压鉴,font-style也可以使用漸變色或圖片填充。

font-variant:normal(Default)??????? small-caps(小型的大寫字母來顯示所有的小寫字母)

font-weight:lighter??????? normal(默認)????????? bold(粗體)???????? bolder

font-size:20px??????? 2em??????? 150%

font-family:設(shè)置多種字體備選???????? 支持@font-face??????????? Web安全字體

文本對齊

context.textAlign=left??? center??? right,基準(zhǔn):給定文本的初始坐標(biāo)值锻拘,分別以此為左邊界油吭,中間點和右邊界击蹲。

context.textBaseline= top??????? middle??????????bottom針對繪制文字的坐標(biāo)的Y值而言,分別以此為上邊界婉宰,中間點和下邊界歌豺;還有三個屬性值alphabetic(Default)------基于拉丁字母的語言,ideographic------基于中文,日本語,hanging--------基于印度語

文本的度量

context.measureText(string).width:傳入一個字符串心包,返回一個對象类咧,這個對象擁有一個width的屬性,這個屬性將返回傳入的這個字符串在canvas上渲染的時候渲染出的字符串的寬度谴咸,在調(diào)用這個函數(shù)前轮听,一定要設(shè)置好相應(yīng)的font屬性。

陰影

context.shadowColor??????????????? ???||?????????? ???? context.shadowOffsetX?????????????????????????? ||????????????? context.shadowOffsetY??????????????? ||????????????????context.shadowBlur:陰影模糊的程度

globalAlpha

context.globalAlpha=1(Default):使全局具有透明度的方式

globalCompositeOperation:繪制的圖像在全局的時候所產(chǎn)生的效果

globalCompositeOperation="source-over"(Default):指后繪制的圖形和前面繪制的圖形如果發(fā)生遮擋的話岭佳,后繪制的圖形就會壓蓋在前面繪制的圖形上血巍。source指后繪制的圖形。globalCompositeOperation="destination-over"前面繪制的圖形會壓蓋珊随,destination指前繪制的圖形述寡。共有11種不同的效果,可以查看W3C文檔R抖础v晷住!

剪輯區(qū)域?????? context.clip()

cotext.beginPath();

context.arc(400,400,150,0,Math.PI*2);

context.clip();

beginPath()后衩辟,用arc函數(shù)繪制了一個圓形的路徑螟炫,之后對于這個圓形的路徑并不把它繪制出來而使用了一次clip(),使用clip()的作用是使用剛才繪制的路徑,把它剪切為當(dāng)前的繪制環(huán)境艺晴。


clearRect

context.clearRect(x,y,width,height):對指定區(qū)域的矩形進行一次清空操作昼钻。


isPointInPath

context.isPointInPath(x,y):點擊檢測函數(shù),傳入的參數(shù)(x,y)組成一個點的坐標(biāo)封寞,判斷這個點的坐標(biāo)是否在當(dāng)前規(guī)劃的路徑內(nèi)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末然评,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狈究,更是在濱河造成了極大的恐慌碗淌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抖锥,死亡現(xiàn)場離奇詭異亿眠,居然都是意外死亡,警方通過查閱死者的電腦和手機宁改,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門缕探,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人还蹲,你說我怎么就攤上這事爹耗“铱迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵潭兽,是天一觀的道長倦始。 經(jīng)常有香客問我,道長山卦,這世上最難降的妖魔是什么鞋邑? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮账蓉,結(jié)果婚禮上枚碗,老公的妹妹穿的比我還像新娘。我一直安慰自己铸本,他們只是感情好肮雨,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箱玷,像睡著了一般怨规。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锡足,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天波丰,我揣著相機與錄音,去河邊找鬼舶得。 笑死掰烟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沐批。 我是一名探鬼主播媚赖,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼珠插!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颖对,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捻撑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缤底,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顾患,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年个唧,在試婚紗的時候發(fā)現(xiàn)自己被綠了江解。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡徙歼,死狀恐怖犁河,靈堂內(nèi)的尸體忽然破棺而出鳖枕,到底是詐尸還是另有隱情,我是刑警寧澤桨螺,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布宾符,位于F島的核電站,受9級特大地震影響灭翔,放射性物質(zhì)發(fā)生泄漏魏烫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一肝箱、第九天 我趴在偏房一處隱蔽的房頂上張望哄褒。 院中可真熱鬧,春花似錦煌张、人聲如沸呐赡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罚舱。三九已至,卻和暖如春绎谦,著一層夾襖步出監(jiān)牢的瞬間管闷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工窃肠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留包个,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓冤留,卻偏偏與公主長得像碧囊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纤怒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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

  • 一糯而、canvas簡介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個矩形區(qū)...
    Looog閱讀 3,942評論 3 40
  • 一:canvas簡介 1.1什么是canvas泊窘? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,683評論 2 32
  • 一熄驼、canvas簡介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個矩形區(qū)...
    J_L_L閱讀 1,516評論 0 4
  • 一烘豹、基礎(chǔ)介紹和畫直線 大多數(shù)現(xiàn)代瀏覽器都是支持Canvas的,比如 Firefox, safari, chrome...
    空谷悠閱讀 842評論 0 1
  • 本章內(nèi)容 理解 元素 繪制簡單的 2D 圖形 使用 WebGL 繪制 3D 圖形 這個元素負責(zé)在頁面中設(shè)定一個區(qū)域...
    悶油瓶小張閱讀 849評論 0 0