canvas畫圖

基本用法

canvas元素

<canvas id="canvas" width="400" height="400"></canvas>

獲取繪圖功能對象

var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');

canvas繪圖方法

context.fill() // 填充
context.stroke() // 描邊

context.fillStyle = " " // 填充顏色
context.strokeStyle = " " // 邊框顏色
context.lineWidth = xx // 邊框?qū)挾?/p>

context.fillRect(x,y,width,height) // 繪制一個(gè)填充矩形
context.strokeRect(x,y,width,height) // 繪制一個(gè)描邊矩形
context.clearRect(x,y,width,height) // 清除矩形區(qū)域

context.arc(x,y,radius,starAngle,endAngle,anticlockwise)
// 繪制圓或圓弧
// anticlockwise 逆時(shí)針方向

// 角度-弧度轉(zhuǎn)換
function getRads (degrees) { 
    return (Math.PI * degrees) / 180; 
} 

// 弧度-角度轉(zhuǎn)換
function getDegrees (rads) { 
    return (rads * 180) / Math.PI; 
}

context.beginPath() // 開啟新路徑
context.closePath() // 關(guān)閉路徑

context.moveTo(x,y)
context.lineTo(x,y) // 繪制線段

漸變

線性漸變
var lg = context.createLinearGradient(xStart,yStart,xEnd,yEnd);
lg.addColorStop(offset,color);  //  offset:設(shè)定的顏色離漸變結(jié)束點(diǎn)的偏移量(0~1)
徑向漸變
var rg = context.createRadialGradient(xStart,yStart,radiusStart,xEnd,yEnd,radiusEnd);
rg.addColorStop(offset,color);

陰影

context.shadowOffsetX = num;  // 陰影的橫向位移婆翔,默認(rèn)0
context.shadowOffsetY = num;  // 陰影的縱向位移掏婶,默認(rèn)0
context.shadowColor = 'color';  // 陰影的顏色
context.shadowBlur = num;  // 陰影的模糊范圍(值越大越模糊)

繪制圖像

繪圖
context.drawImage(image,x,y);  
// Image對象
// 繪制圖像的x坐標(biāo)
// 繪制圖像的y坐標(biāo)

context.drawImage(image,x,y,w,h);
// Image對象
// 繪制圖像的x坐標(biāo)
// 繪制圖像的y坐標(biāo)
// 繪制圖像的寬度
// 繪制圖像的高度

context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh);  *選取圖像的一部分矩形區(qū)域進(jìn)行繪制
// Image對象
// 圖像上的x坐標(biāo)
// 圖像上的y坐標(biāo)
// 矩形區(qū)域的寬度
// 矩形區(qū)域的高度
// 畫在canvas的x坐標(biāo)
// 畫在canvas的y坐標(biāo)
// 畫出來的寬度
// 畫出來的高度
圖像平鋪
context.createPattern(image,type);
// type: no-repeat 不平鋪  repeat-x 橫向平鋪  repeat-y 縱向平鋪  repeat 全部平鋪
圖像裁剪
context.clip();
// 只繪制封閉路徑區(qū)域內(nèi)的圖像
// 用法:先創(chuàng)建裁剪區(qū)域,再繪制圖像
注意:之后繪制的圖形都會采用這個(gè)裁剪區(qū)域最蕾,要取消這個(gè)裁剪區(qū)域就需要用到保存恢復(fù)狀態(tài)

繪制文字

context.fellText(text, x, y [, maxWidth]);  // 填充文字
context.strokeText(text, x, y [, maxWidth]);  // 描邊文字
// 要繪制的文字
// 文字起點(diǎn)的x坐標(biāo)
// 文字起點(diǎn)的y坐標(biāo)
// 繪制的最大寬度(可選)

context.font = "是否加粗 字號 字體";  // 設(shè)置文字樣式老厌,默認(rèn)10px sans-serif
context.textAlign = " ";  // 水平對齊方式 (start/end/right/center)
context.textBaseline = " ";  // 垂直對齊方式  (top、hanging梅桩、middle拜隧、alphabetic、ideographic洪添、bottom)

var text = context.measureText(text);  // TextMetrics object
text.width;  // 得到字體寬度(像素)

保存和恢復(fù)狀態(tài)

context.save();  // 保存當(dāng)前context的狀態(tài)、屬性
context.restore();  // 恢復(fù)到保存前的狀態(tài)干奢、屬性(重置)

平移、旋轉(zhuǎn)和縮放

context.translate(x,y);  // 平移
context.rotate(angle);  // 旋轉(zhuǎn)
context.scale(x,y);  // 縮放

圖形組合

context.globalCompositeOperation = type; 
// type:
source-over(默認(rèn)):在原有圖形上繪制新圖形
destination-over: 在原有圖形下繪制新圖形
source-in: 顯示新圖形交集部分
destination-in: 顯示原有圖形交集部分
source-out: 顯示新圖形非交集部分
destination-out: 顯示原有圖形非交集部分
source-atop: 顯示原有圖形+新圖形交集部分
destination-atop: 顯示新圖形+原有圖形交集部分
lighter: 交集部分顏色疊加
xor: 交集部分清除
copy: 只保留新圖形

繪制陰影

context.shadowOffsetX = num;  // 陰影X軸位移(默認(rèn)0)
context.shadowOffsetY = num;  // 陰影Y軸位移(默認(rèn)0)
context.shadowColor = "color";  // 陰影顏色
context.shadowBlur = num;  // 陰影模糊范圍

(未完待續(xù)...)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薄啥,一起剝皮案震驚了整個(gè)濱河市逛尚,隨后出現(xiàn)的幾起案子垄惧,更是在濱河造成了極大的恐慌到逊,老刑警劉巖铣口,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脑题,死亡現(xiàn)場離奇詭異,居然都是意外死亡叔遂,警方通過查閱死者的電腦和手機(jī)旷坦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秒梅,“玉大人,你說我怎么就攤上這事捆蜀。” “怎么了辆它?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呢蔫。 經(jīng)常有香客問我,道長片吊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任俏脊,我火速辦了婚禮肤晓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘补憾。我一直安慰自己,他們只是感情好盈匾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著威酒,像睡著了一般挺峡。 火紅的嫁衣襯著肌膚如雪担钮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天箫津,我揣著相機(jī)與錄音,去河邊找鬼苏遥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛田炭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播教硫,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼萨咕,長吁一口氣:“原來是場噩夢啊……” “哼宜雀!你這毒婦竟也來了翁涤?” 一聲冷哼從身側(cè)響起坤邪,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伞插,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蜂怎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體置尔,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年榜轿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谬盐。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖皇型,靈堂內(nèi)的尸體忽然破棺而出诬烹,到底是詐尸還是另有隱情弃鸦,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布唬格,位于F島的核電站,受9級特大地震影響购岗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喊积,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韭邓。 院中可真熱鬧,春花似錦溶弟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擒权。三九已至,卻和暖如春碳抄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剖效。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留璧尸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓爷光,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛀序。 傳聞我的和親對象是個(gè)殘疾皇子活烙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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

  • 一:canvas簡介 1.1什么是canvas瓣颅? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,683評論 2 32
  • 書中代碼示例效果展示:Core HTML5 Canvas Examples 基礎(chǔ)知識 canvas元素 canva...
    szu_bee閱讀 2,826評論 2 28
  • 一譬正、canvas簡介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    Looog閱讀 3,942評論 3 40
  • --繪圖與濾鏡全面解析 概述 在iOS中可以很容易的開發(fā)出絢麗的界面效果曾我,一方面得益于成功系統(tǒng)的設(shè)計(jì),另一方面得益...
    韓七夏閱讀 2,727評論 2 10
  • 看過很多回答 什么樣的感覺是喜歡一個(gè)人 以前總給不出很確定的答案 現(xiàn)在就是 雖然很想很想跟他多在一起一分鐘 但是知...
    uaremybelief閱讀 187評論 0 0