MDN文檔 canvas教程筆記

MDN Canvas教程
API Canvas?Rendering?Context2Dcanvas.getContext('2d')返回的對象類型晤柄,幾乎所有作圖操作基于這個“上下文對象”而非canvas dom,下文以context2D作簡稱


只有矩形蜡坊、文本、圖片是可直接繪制顯示的

fillRect(x, y, width, height)
繪制一個填充的矩形
strokeRect(x, y, width, height)
繪制一個矩形的邊框
clearRect(x, y, width, height)
清除指定矩形區(qū)域赎败,讓清除部分完全透明秕衙。
fillText(text, x, y [, maxWidth])
在(x,y)位置繪制(填充)文本。
strokeText(text, x, y [, maxWidth])
在(x,y)位置繪制(描邊)文本僵刮。
drawImage(image, dx, dy [, dWidth, dHeight])
drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
在(x,y)位置繪制圖像灾梦。

其他均需要路徑

beginPath()
新建一條路徑
closePath()
閉合路徑(即路徑?jīng)]有閉合時,從當(dāng)前點生成一條直線路徑連到起始點妓笙,使其閉合)
stroke()
繪制路徑(即描邊)
fill()
(根據(jù)設(shè)置)填充路徑內(nèi)部

路徑

context2D路徑方法(省略參數(shù)):
moveTo()
將一個新的子路徑的起始點移動到(x若河,y)坐標(biāo)。
lineTo()
使用直線連接子路徑的終點到 x, y 坐標(biāo)寞宫。
quadraticCurveTo()
添加一條二次貝賽爾曲線到當(dāng)前路徑萧福。
bezierCurveTo()
添加一條三次貝賽爾曲線到當(dāng)前路徑。
arc()
添加一條圓弧路徑辈赋。
arcTo()
根據(jù)控制點和半徑添加一條圓弧路徑(同時使用直線連接前一個點鲫忍,原因下面解釋)
ellipse()
添加一條橢圓路徑。
rect()
創(chuàng)建一條矩形路徑钥屈,矩形的起點位置是 (x, y) 悟民,尺寸為 width 和 height。

額外
Path2D:直接的路徑對象篷就,其具有的方法context2D均有射亏。可作stroke()和fill()的參數(shù)而被繪制。意義在于分離出“路徑”智润,從而在多個canvas上重復(fù)繪制及舍,更加靈活。
同時可以使用SVG path data來初始化窟绷,如new Path2D("M10 10 h 80 v 80 h -80 Z");

樣式锯玛、變形等

1.顏色、線段粗細(xì)兼蜈、字體攘残、全局透明度等,直接操作context2D的屬性为狸。
最常用是fill?Style和strokeStyle肯腕。可以對其直接賦值#000钥平、rgba(0,0,0,0)等顏色实撒,也可賦值為createLinearGradient(x1, y1, x2, y2)createRadialGradient(x1, y1, r1, x2, y2, r2)等對象創(chuàng)建的“漸變對象”涉瘾。

2.變形知态、虛線距離等,通過context2D的方法操作
虛線:setLineDash(segments)立叛。segments是一個Array數(shù)組负敏,描述交替繪制線段和間距長度的數(shù)字。 如果數(shù)組元素的數(shù)量是奇數(shù)秘蛇, 數(shù)組的元素會被復(fù)制并重復(fù)其做。例如, [5, 15, 25] 會變成 [5, 15, 25, 5, 15, 25]赁还。取消虛線可直接設(shè)為空數(shù)組[]
變形:類似于css的transform屬性的各個可用函數(shù)妖泄。如translate()、rotate()艘策、scale()

重要
復(fù)雜作圖時蹈胡,經(jīng)常需要變換原點進(jìn)行旋轉(zhuǎn)、繪圖朋蔫,或切換顏色罚渐、線寬,此時可用save()驯妄、restore()方法以“椇刹ⅲ”結(jié)構(gòu)保存若干設(shè)置。


額外

1.當(dāng)前路徑為空青扔,即調(diào)用beginPath()之后源织,或者canvas剛建的時候翩伪,第一條路徑構(gòu)造命令通常被視為是moveTo(),無論實際上是什么雀鹃。如:
lineTo(10,10);被視為moveTo(10,10);
arc(0,0,50,0,Math.PI*2);被視為moveTo(0,50);arc(0,0,50,0,Math.PI*2);励两,即作圓時第一個下筆的點被作為moveTo的點黎茎,然后繼續(xù)作圓

2.所有沒有moveTo的跳躍性路徑操作,被視為直線路徑連接当悔,如:
moveTo(100,100);arc(0,0,50,0,Math.PI*2);繪制后將發(fā)現(xiàn)有一條直線從(100,100)連到(0,50)傅瞻,即從當(dāng)前點連線到作圓時第一個下筆的點。為了避免這種情況盲憎,最簡單的方法就是重新beginPath()新開一條路徑

3.isPointInPath()嗅骄、isPointInStroke():前者判斷某點是否在閉合路徑內(nèi)部,后者判斷是否在“邊”上饼疙。
關(guān)于如何判斷內(nèi)部溺森,有:
(1)"evenodd": 奇偶環(huán)繞規(guī)則
以該點為端點,作一條足夠長的射線窑眯,方向任意屏积。如果與路徑(邊)相交次數(shù)為奇數(shù),則在內(nèi)部磅甩;偶數(shù)則在外部炊林。
(2)"nonzero": 非零環(huán)繞規(guī)則(默認(rèn)值)
以該點為端點,作一條足夠長的射線卷要,方向任意渣聚。以該射線為主視角,起始值為0僧叉,如果某條路徑從左往右穿過奕枝,則+1;從右往左穿過瓶堕,則-1倍权;計算最終的值,如果非0捞烟,則在內(nèi)部薄声;如果為0,則在外部题画。
注意:我們無需確保每個方向的射線的最終值都一樣默辨。即可能90°算到是1,而180°算到是-1苍息,最終他們都是“非0”缩幸,結(jié)果是一致的壹置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市表谊,隨后出現(xiàn)的幾起案子钞护,更是在濱河造成了極大的恐慌,老刑警劉巖爆办,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难咕,死亡現(xiàn)場離奇詭異,居然都是意外死亡距辆,警方通過查閱死者的電腦和手機余佃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跨算,“玉大人爆土,你說我怎么就攤上這事≈畈希” “怎么了步势?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長背犯。 經(jīng)常有香客問我立润,道長,這世上最難降的妖魔是什么媳板? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任桑腮,我火速辦了婚禮,結(jié)果婚禮上蛉幸,老公的妹妹穿的比我還像新娘破讨。我一直安慰自己,他們只是感情好奕纫,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布提陶。 她就那樣靜靜地躺著,像睡著了一般匹层。 火紅的嫁衣襯著肌膚如雪隙笆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天升筏,我揣著相機與錄音撑柔,去河邊找鬼。 笑死您访,一個胖子當(dāng)著我的面吹牛铅忿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灵汪,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼檀训,長吁一口氣:“原來是場噩夢啊……” “哼柑潦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峻凫,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤渗鬼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荧琼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體譬胎,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年铭腕,在試婚紗的時候發(fā)現(xiàn)自己被綠了银择。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片多糠。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡累舷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夹孔,到底是詐尸還是另有隱情被盈,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布搭伤,位于F島的核電站只怎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怜俐。R本人自食惡果不足惜身堡,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拍鲤。 院中可真熱鬧贴谎,春花似錦、人聲如沸季稳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽景鼠。三九已至仲翎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铛漓,已是汗流浹背溯香。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浓恶,地道東北人逐哈。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像问顷,于是被迫代替她去往敵國和親昂秃。 傳聞我的和親對象是個殘疾皇子禀梳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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

  • 本文不允許任何形式的轉(zhuǎn)載! 閱讀提示 本系列文章不適合以下人群閱讀肠骆,如果你無意點開此文算途,請對號入座,以免浪費你寶貴...
    老霸王龍閱讀 678評論 0 0
  • 神奇且強大的canvas 一.Canvas的基本介紹 1.什么是Canvas 定義:是HTML5提供的一種新標(biāo)簽,...
    Ainy塵世繁花終凋落閱讀 10,719評論 1 18
  • ??HTML5 添加的最受歡迎的功能就是 元素。這個元素負(fù)責(zé)在頁面中設(shè)定一個區(qū)域莉钙,然后就可以通過 JavaScri...
    霜天曉閱讀 2,993評論 0 2
  • canvas元素的基礎(chǔ)知識 在頁面上放置一個canvas元素廓脆,就相當(dāng)于在頁面上放置了一塊畫布,可以在其中進(jìn)行圖形的...
    oWSQo閱讀 10,270評論 0 19
  • 聽樊登講課,最大的特點是生動蚊伞,嬉笑怒罵席赂,都是文章! 這堂課是探討領(lǐng)導(dǎo)力时迫,一個創(chuàng)業(yè)者繞不開的話題颅停!創(chuàng)業(yè)不是單打獨斗,...
    笑獅錢欣閱讀 777評論 0 0