JavaScript操作Canvas實現(xiàn)畫板實例分析

Canvas元素用來支持在網(wǎng)頁上繪制圖形圖像

以前在網(wǎng)頁中進行交互繪圖是很困難的(需要依賴額外的第三方插件)侦另,而引入的Canvas特性使得作者可以很容易的在網(wǎng)頁上繪制各種圖形和圖像秩命。

Canvas提供了腳本(JavaScript)應(yīng)用接口,我們可以使用JS代碼來操作畫布褒傅,添加各種圖形以及實現(xiàn)用戶交互弃锐。這些特性使得HTML5在開發(fā)網(wǎng)頁游戲和一些復(fù)雜的網(wǎng)頁動畫上變得更加方便。

比如下面這個例子殿托,使用Canvas實現(xiàn)了簡單的在線畫板功能霹菊,你可以直接在網(wǎng)頁上繪制線條:


效果圖如下:


實際上Canvas規(guī)范包含兩個部分,一個是HTML5新引入的canvas元素支竹,還有更為關(guān)鍵的2D渲染上下文旋廷。實際上前者只是一個容器,后者才是真正繪圖的地方礼搁。它包含繪圖和圖形操作所需要的全部方法和豐富功能饶碘。 強調(diào)一下:繪圖是在2D渲染上下文中進行的,而不是在canvas元素中進行叹坦⌒芰停可以通過canvas元素訪問和顯示2D渲染上下文。

canvas元素的語法很簡單募书,除了id和class外,還有兩個和容器尺寸相關(guān)的屬性:寬和高测蹲。

<canvas id="myCanvas" height="500" width="500"></canvas>

我們接下來先搞清楚2D渲染上下文的用法莹捡。


畫布圖形實際上是繪制在2D渲染上下文里

canvas元素并非Canvas中最強大的部分,真正的關(guān)鍵部分是2D渲染上下文扣甲,這是你真正繪制圖形的地方篮赢。canvas元素的用途只是作為2D渲染上下文的包裝器齿椅,它包含繪圖和圖形操作所需要的全部方法和豐富功能。理解這一點是很重要的启泣,強調(diào)一下:繪圖是在2D渲染上下文中進行的涣脚,而不是在canvas元素中進行×让#可以通過canvas元素訪問和顯示2D渲染上下文遣蚀。

坐標(biāo)系統(tǒng)

2D渲染上下文是一種基于屏幕的標(biāo)準繪圖平臺。與其他的2D平臺類似纱耻,它采用平面的笛卡兒坐標(biāo)系統(tǒng)芭梯,左上角為原點(0,0)。向右移動時弄喘,x坐標(biāo)值會增加玖喘;向下移動時,y坐標(biāo)值會增加蘑志。如果你想把圖形繪制到正確的位置上累奈,一定要理解這個坐標(biāo)系統(tǒng)。


坐標(biāo)系統(tǒng)的1個單位通常相當(dāng)于屏幕的1個像素急但,所以位置(24澎媒,30)是向右24像素和向下30像素的位置。有時候坐標(biāo)系統(tǒng)的1個單位相當(dāng)于2個像素(例如羊始,在一些高分辨率顯示器中)旱幼,但是一般的經(jīng)驗法則是1個坐標(biāo)單位等于1個屏幕像素。

訪問2D渲染上下文

我們先創(chuàng)建只有一個空白canvas元素的簡單HTML網(wǎng)頁:

<canvas id="myCanvas" width="200" height="200">

<!-- Insert fallback content here -->

</canvas>

在這個例子中突委,我們將這個canvas元素賦值給一個變量柏卤,然后再通過調(diào)用getContext方法將得到的2D渲染上下文賦給另一個變量。 必須強調(diào)一點匀油,由于我們使用了jQuery缘缚,所以需要調(diào)用get方法才能訪問DOM中的canvas元素,然后才能夠訪問Canvas的getContext方法敌蚜。

有了包含2D渲染上下文的變量之后桥滨,就可以開始繪制圖形了。在上下文變量聲明語句之后添加下面這行代碼:

context.fillRect(0,0,200,200);

完整的JS代碼如下:


上述代碼將在畫布上繪制如下的一個黑色矩形弛车,從坐標(biāo)(0齐媒,0)處開始,長寬均為200px:


這個矩形是黑色的纷跛,因為Canvas所繪制元素的默認顏色是黑色喻括。

最后,如果有想一起學(xué)習(xí)web前端贫奠,HTML5及JavaScript的可以來一下我的前端群733581373唬血,好友都會在里面交流望蜡,分享一些學(xué)習(xí)的方法和需要注意的小細節(jié),每天也會準時的講一些前端的炫酷特效拷恨,及前端直播課程學(xué)習(xí)

?

如果想看到更加系統(tǒng)的文章和學(xué)習(xí)方法經(jīng)驗可以關(guān)注的微信號:‘web前端技術(shù)圈’或者‘webxh6’關(guān)注后回復(fù)‘2018’可以領(lǐng)取一套完整的學(xué)習(xí)視頻

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脖律,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腕侄,更是在濱河造成了極大的恐慌小泉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜挨,死亡現(xiàn)場離奇詭異膏孟,居然都是意外死亡,警方通過查閱死者的電腦和手機拌汇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門柒桑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人噪舀,你說我怎么就攤上這事魁淳。” “怎么了与倡?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵界逛,是天一觀的道長。 經(jīng)常有香客問我纺座,道長息拜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任净响,我火速辦了婚禮少欺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馋贤。我一直安慰自己赞别,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布配乓。 她就那樣靜靜地躺著仿滔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犹芹。 梳的紋絲不亂的頭發(fā)上崎页,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音腰埂,去河邊找鬼实昨。 笑死,一個胖子當(dāng)著我的面吹牛盐固,可吹牛的內(nèi)容都是我干的荒给。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼刁卜,長吁一口氣:“原來是場噩夢啊……” “哼志电!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛔趴,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挑辆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孝情,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鱼蝉,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年箫荡,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁亦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡羔挡,死狀恐怖洁奈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绞灼,我是刑警寧澤利术,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站低矮,受9級特大地震影響印叁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜军掂,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一轮蜕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧良姆,春花似錦肠虽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痊剖,卻和暖如春韩玩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陆馁。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工找颓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叮贩。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓击狮,卻偏偏與公主長得像佛析,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彪蓬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

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

  • --繪圖與濾鏡全面解析 概述 在iOS中可以很容易的開發(fā)出絢麗的界面效果寸莫,一方面得益于成功系統(tǒng)的設(shè)計,另一方面得益...
    韓七夏閱讀 2,737評論 2 10
  • ??HTML5 添加的最受歡迎的功能就是 元素。這個元素負責(zé)在頁面中設(shè)定一個區(qū)域酷誓,然后就可以通過 JavaScri...
    霜天曉閱讀 3,019評論 0 2
  • 一:canvas簡介 1.1什么是canvas披坏? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,691評論 2 32
  • canvas元素的基礎(chǔ)知識 在頁面上放置一個canvas元素,就相當(dāng)于在頁面上放置了一塊畫布盐数,可以在其中進行圖形的...
    oWSQo閱讀 10,310評論 0 19
  • Canvas繪圖 HTML5 的 canvas 元素使用 JavaScript 在網(wǎng)頁上繪制圖像棒拂。 畫布是一個矩形...
    shanruopeng閱讀 18,355評論 2 14