999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

以寫(xiě)字本為例辨析Canvas繪圖機(jī)制的優(yōu)劣

2014-04-29 06:09:35李岸芩
計(jì)算機(jī)時(shí)代 2014年8期

李岸芩

摘 要: 通過(guò)比較SVG和Canvas兩種繪圖機(jī)制,辨析了使用Canvas在網(wǎng)頁(yè)中繪圖方案的優(yōu)缺點(diǎn)。使用一個(gè)在線(xiàn)寫(xiě)字本案例,論述了Canvas捕獲用戶(hù)的鼠標(biāo)事件根據(jù)用戶(hù)輸入來(lái)繪圖的過(guò)程。最后總結(jié)了Canvas繪圖的特性以及應(yīng)用前景。

關(guān)鍵詞: Canvas; 繪圖; 寫(xiě)字本; 事件

中圖分類(lèi)號(hào):P315.69 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2014)08-17-02

Discussion about Canvas drawing scheme with example of notebook

Li Anqin

(Network Technology Department of South-China Institute of Software Engineering, Guangzhou, Guangdong 510990, China)

Abstract: By comparing two different drawing mechanisms between the SVG and the Canvas, the merits and drawbacks of Canvas scheme drawing pictures on web page are analyzed. With the example of notebook on Windows, the process of drawing picture through catching the user's input and mouse events is discussed. The features and application prospect of Canvas drawing scheme are summarized.

Key words: Canvas; drawing; notebook; event

0 引言

1 SVG和Canvas繪圖技術(shù)比較

⑴ Canvas繪制的圖像是由一組二維像素網(wǎng)格來(lái)表示的柵格圖形,而SVG繪制的矢量圖形是基于圖形本身的幾何特征來(lái)表示的[2],因此,除非需要對(duì)Canvas區(qū)域重新渲染,否則使用Canvas繪制的圖像在放大或縮小時(shí)會(huì)失真;

⑵ 從搜索引擎角度來(lái)看,SVG繪圖中的文本能被搜索引擎獲取,而Canvas中的文本實(shí)際上是圖像的一部分,不能被搜索引擎識(shí)別;

⑶ SVG將畫(huà)布中的元素作為HTML的一部分,同DOM API構(gòu)成了一個(gè)矢量的繪圖API,而Canvas不屬于網(wǎng)頁(yè)HTML的DOM結(jié)構(gòu)或任何的命名空間,也不能直接檢測(cè)鼠標(biāo)單擊了圖像的哪個(gè)點(diǎn),因此需要借助鼠標(biāo)坐標(biāo)在圖像中的定位來(lái)實(shí)現(xiàn)。

綜上所述,相比起SVG繪圖來(lái)說(shuō),Canvas仍具有一些明顯的不足,但是HTML5規(guī)范中使用的是Canvas繪圖機(jī)制,說(shuō)明其仍具有一定的優(yōu)勢(shì),如:Canvas沒(méi)有將畫(huà)布中的的元素作為對(duì)象進(jìn)行存儲(chǔ),不需要在瀏覽器中大量地添加各種DIV元素,因此HTML代碼較簡(jiǎn)潔,執(zhí)行效率較好。另外,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),Canvas入門(mén)較簡(jiǎn)單,而學(xué)習(xí)SVG需要有比較扎實(shí)的瀏覽器編程基礎(chǔ)。

2 Canvas繪圖的應(yīng)用

Canvas繪圖的應(yīng)用非常廣泛,既可以繪制靜態(tài)的展示性的統(tǒng)計(jì)圖表,也可以根據(jù)用戶(hù)輸入進(jìn)行交互式的繪圖,包括各種矩形、弧形、不規(guī)則圖形等,為HTML5的游戲開(kāi)發(fā)提供了豐富的創(chuàng)意空間,也使交互性的設(shè)計(jì)成為了可能。下面就以用戶(hù)輸入來(lái)繪圖的記事本為例說(shuō)明Canvas繪圖的過(guò)程。

在記事本中允許用戶(hù)自己定義畫(huà)筆的顏色和粗細(xì),采用HTML5中type="range"的input標(biāo)簽可以創(chuàng)建允許用戶(hù)設(shè)置筆觸粗細(xì)的滑動(dòng)條,使用type="color"的input輸入框創(chuàng)建控制筆觸顏色的選擇器。這里將灰色文字作為用戶(hù)描畫(huà)的藍(lán)本,置于Canvas對(duì)象的下一層,即“z-index:2”,將田字格的背景置于最底層,即“z-index:1”,建立修改畫(huà)筆屬性的表單,實(shí)現(xiàn)的界面如圖1所示。

通過(guò)給Canvas對(duì)象增加三個(gè)事件監(jiān)聽(tīng)器,獲得用戶(hù)在田字格中使用鼠標(biāo)寫(xiě)字的動(dòng)作,根據(jù)用戶(hù)鼠標(biāo)的位置來(lái)判斷用戶(hù)寫(xiě)字的筆劃。其代碼總結(jié)如表1所示。

首先,用戶(hù)按下鼠標(biāo)表示開(kāi)始繪圖,這是一個(gè)瞬間的事件,為MouseDown的事件添加名為“drawStart”函數(shù),在該函數(shù)中使用全局變量記錄下用戶(hù)點(diǎn)擊鼠標(biāo)的坐標(biāo)位置作為繪圖的起點(diǎn);用戶(hù)在移動(dòng)鼠標(biāo)(MouseMove)時(shí),添加名為“drawLine”的事件,在該事件中獲取用戶(hù)設(shè)定的筆觸大小和顏色以進(jìn)行繪圖,此事件會(huì)隨著用戶(hù)鼠標(biāo)位置的移動(dòng)不停地被執(zhí)行;最后,用戶(hù)松開(kāi)鼠標(biāo)時(shí)(MouseUp)為Canvas對(duì)象添加名為“drawEnd”的事件,通知瀏覽器停止繪圖。其中移動(dòng)鼠標(biāo)時(shí)繪圖的核心代碼如下:

drawWord=function(x1, y1, x2, y2) {

var c=document.getElementById("myWrite");

if (c && c.getContext("2d")) {

var cxt=c.getContext("2d");

//根據(jù)鼠標(biāo)的位置

cxt.beginPath();

cxt.moveTo(x1, y1);

cxt.lineTo(x2, y2);

cxt.closePath();

//開(kāi)始畫(huà)線(xiàn),根據(jù)用戶(hù)的選擇來(lái)設(shè)置線(xiàn)條屬性

cxt.lineWidth=$("#lineWidth").val();

cxt.strokeStyle=$("#lineColor").val();

cxt.stroke();

}

};

同時(shí),用戶(hù)點(diǎn)擊其他文字的時(shí)候采用Canvas API的clearRect()的方法清除用戶(hù)先前的繪圖痕跡,重新開(kāi)始一副新的繪圖,最終實(shí)現(xiàn)效果如圖2所示。

通過(guò)以上案例可以看出,使用Canvas繪圖代碼較為簡(jiǎn)單,有網(wǎng)頁(yè)設(shè)計(jì)基礎(chǔ)的人員都能夠掌握,它可以模擬逼真的鼠標(biāo)寫(xiě)字的效果,通過(guò)捕獲鼠標(biāo)的坐標(biāo)可以準(zhǔn)確定位畫(huà)筆的位置,并提供個(gè)性化的畫(huà)筆屬性的選擇。但是也存在一定的缺陷,如果用戶(hù)移動(dòng)鼠標(biāo)過(guò)快,則呈現(xiàn)出的線(xiàn)條不夠流暢,線(xiàn)性只是單調(diào)的矩形,不能根據(jù)用戶(hù)按住鼠標(biāo)的力度調(diào)整線(xiàn)條粗細(xì)等。但是上述情況在大多瀏覽器繪圖機(jī)制中都存在,因此有待瀏覽器繪圖技術(shù)的進(jìn)一步發(fā)展來(lái)改善。需要注意的是,Canvas繪圖在不同的瀏覽器中的支持情況不同,本案例在下述瀏覽器中的測(cè)試情況如表2所示。

說(shuō)明:“×”表示不支持,“○”表示能夠正確的呈現(xiàn)

3 結(jié)束語(yǔ)

參考文獻(xiàn):

[1] 萬(wàn)本庭,陳明.基于SVG的矢量圖形庫(kù)管理模型[J].計(jì)算機(jī)工程,

2006.2:65-67

[2] Peter Lubbers[荷],Brian Albers[美],F(xiàn)rank Salim[美]著,柳靖,李杰,劉

淼譯.HTML5程序設(shè)計(jì)(第二版)[M].人民郵電出版社,2012.

[3] Brian P.Hogan[美]著,李杰,劉曉娜,朱嵬譯.HTML5和CSS3實(shí)例教

程[M].人民郵電出版社,2012.

主站蜘蛛池模板: 国产精品2| 亚洲乱强伦| 国产欧美日韩一区二区视频在线| 免费毛片a| 国产微拍精品| 国产在线精彩视频二区| 亚洲精品波多野结衣| 国产成人精彩在线视频50| 亚洲无码四虎黄色网站| 亚洲第一成人在线| 亚洲欧洲一区二区三区| 青青草原偷拍视频| 久久福利片| 欧美成人免费午夜全| 最新国产高清在线| …亚洲 欧洲 另类 春色| 亚洲swag精品自拍一区| 亚洲一区二区日韩欧美gif| 国产欧美综合在线观看第七页| 欧美精品在线视频观看| 香蕉eeww99国产在线观看| 久久黄色免费电影| 综1合AV在线播放| 99爱在线| 国产丝袜精品| 国内精品久久久久久久久久影视 | 国模视频一区二区| 亚洲国产日韩在线成人蜜芽| 国产靠逼视频| 国产麻豆永久视频| 亚洲综合极品香蕉久久网| 四虎永久免费地址在线网站 | 免费毛片a| 国产av无码日韩av无码网站| 91国内在线视频| 91福利免费| 亚洲福利视频网址| 欧美视频在线不卡| 又爽又黄又无遮挡网站| 午夜欧美理论2019理论| 美女一级免费毛片| 国产精品思思热在线| 91精品情国产情侣高潮对白蜜| 激情综合婷婷丁香五月尤物| 久久亚洲精少妇毛片午夜无码 | 又猛又黄又爽无遮挡的视频网站| 国产成人艳妇AA视频在线| 亚洲 日韩 激情 无码 中出| 久久国产高清视频| 午夜啪啪福利| 国产网站一区二区三区| 高清免费毛片| 国产福利免费观看| 免费a级毛片视频| 色哟哟精品无码网站在线播放视频| 久久久四虎成人永久免费网站| 国产69囗曝护士吞精在线视频| 热久久综合这里只有精品电影| 亚洲中文字幕97久久精品少妇| 欧美a在线看| 国产欧美日韩视频一区二区三区| 黄色污网站在线观看| 26uuu国产精品视频| 国产一区三区二区中文在线| 日韩在线影院| 自偷自拍三级全三级视频| 素人激情视频福利| 99久久这里只精品麻豆| 国产无码在线调教| 亚洲综合极品香蕉久久网| 亚洲欧美不卡视频| 9啪在线视频| 青青草国产免费国产| 亚洲AV无码乱码在线观看裸奔| 亚洲无码免费黄色网址| 婷五月综合| 日韩欧美高清视频| 亚洲成a人在线播放www| 国产在线日本| 91亚洲视频下载| 欧美五月婷婷| 91黄色在线观看|