校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > HTML5邊玩邊學(2)基礎繪圖實現方法

HTML5邊玩邊學(2)基礎繪圖實現方法

熱門標簽:電銷機器人視頻 會聲會影怎樣做地圖標注效果 標準智能外呼系統 江蘇高頻外呼系統線路 搜狗星級酒店地圖標注 地圖標注自己去過的地方 高德地圖標注錯誤怎么修改 平頂山電子地圖標注怎么修改 洛陽市伊川縣地圖標注中心官網

一、坐標系

其實只要玩過一點點圖形編程的人都知道,電腦上的坐標系和數學上的坐標系稍微有點不同,坐標的原點在繪制區域(這里是Canvas)的左上角,X軸正向朝右,Y軸正向朝下,如下圖

聲明:為本文為原創文章,作者保留所有權利!歡迎轉載,轉載請注明作者左洸和出處博客園

 

二、Stroke 和 Fill

HTML5中將圖形分為兩大類:

第一類稱作 Stroke,我的理解就是輪廓、勾勒或者線條,總之,圖形是由線條組成的;

第二類稱作 Fill,就是填充區域

上下文對象中有兩個繪制矩形的方法,可以讓我們很好的理解這兩大類圖形的區別:

一個是 strokeRect,還有一個是 fillRect

下面的代碼分別用這兩個方法來繪制矩形,你可以分別點擊兩個按鈕來看看有什么不同,從而理解 stroke 和 fill 的區別
設置畫布

復制代碼
代碼如下:

<canvas id="test1" width="200" height="200" style=" background-color: grey">你的瀏覽器不支持 &lt;canvas&gt;標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器</canvas>
<input type="button" value="strokeRect" onclick="strokeRect();"/>
<input type="button" value="fillRect" onclick="fillRect();"/>


strokeRect 和 fillRect

復制代碼
代碼如下:

function strokeRect(){
var canvas = document.getElementById('test1');
var ctx=canvas.getContext("2d");
ctx.clearRect(0,0,200,200);
ctx.strokeStyle="blue";
ctx.strokeRect(10,10,180,180);
}
function fillRect(){
var canvas = document.getElementById('test1');
var ctx=canvas.getContext("2d");
ctx.clearRect(0,0,200,200);
ctx.fillStyle="blue";
ctx.fillRect(10,10,180,180);
}
 

你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

 

三、顏色

上下文對象有兩個屬性可以用來設置顏色:strokeStyle 和 fillStyle

strokeStyle 的值決定了你當前要繪制的線條的顏色

fillStyle 的值決定了你當前要填充的區域的顏色

顏色值應該是符合CSS3 顏色值標準的有效字符串。下面的例子都表示同一種顏色。

//這些 fillStyle 的值均為 '橙色',ctx 是上下文對象 
ctx.fillStyle = "orange"
ctx
.fillStyle = "#FFA500";
ctx
.fillStyle = "rgb(255,165,0)"
ctx
.fillStyle = "rgba(255,165,0,1)";

關于顏色,以后會有更多的說明。

 

四、基本繪圖

除了上面給出的兩個繪制矩形的方法外,上下文對象還有幾個方法可以用來繪制一些基本圖形,如下:

moveTo(x,y):moveTo方法并不能畫出任何東西,它只是將畫筆的當前點移動到(x,y)處

lineTo(x,y):從當前點到(x,y)點繪制一條直線。注意:繪制完成后,當前點就變成了(x,y),除非你用 moveTo 方法去改變他

arc(x, y, radius, startAngle, endAngle, anticlockwise) :繪制一條弧線

quadraticCurveTo(cp1x, cp1y, x, y)
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) :這兩個方法都是繪制貝葉斯曲線,具體用法看參考手冊

rect(x, y, width, height) :繪制一個矩形。注意: 當它被調用時,moveTo 方法會自動被調用,參數為(0,0),于是起始坐標又恢復成初始原點了。

有了直線、弧線、曲線、方形和圓形這幾種基本圖形,我們就可以組合出更復雜的圖形了

 

五、理解繪制路徑 Drawing Path

上一篇文章中說過,我們繪制的圖形是先繪制到一個抽象的上下文對象中(其實就是內存中),然后再將上下文對象輸出到顯示設備上,這個輸出到顯示設備的過程不需要我們操心。但是有時候我們并不想立刻輸出每一次繪制動作,也許我想讓一組繪制動作完成以后,再集中一塊輸出, 比如一個圍棋棋盤有19×19條直線組成,正常情況下需要向想顯示設備輸出19×19次,但是如果我們先暫停向顯示設備輸出,等在上下文中(內存中)全部繪制完成19×19條直線時,再向顯示設備輸出,只需要輸出一次就可以了。

這種情況在HTML5中叫做繪制路徑,它由幾個上下文對象的方法組成:

beginPath() :開始路徑,意思就是在你調用這個方法后,你繪制的圖形就不會再向屏幕輸出了,而只是畫到了上下文對象中(內存中)

stroke() :將你調用 beginPath 方法以后繪制的所有線條,一次性輸出到顯示設備上

closePath() :如果你調用 beginPath 方法以后,在上下文對象中進行了一系列的繪制,但是得到的圖形是不閉合的,這個方法將會幫你補上最后一條直線,將你的圖形閉合起來。

注意closePath并不向屏幕輸出圖形,而只是在上下文對象中補上一條線,這個步驟不是必需的

fill() :

如果你的繪制路徑組成的圖形是封閉的,這個方法將用 fillStyle 設置的顏色填充圖形,然后立即向屏幕輸出;

如果繪制路徑不是封閉的,這個方法會先將圖形閉合起來,然后再填充輸出。

注意:所有的 fill 圖形,如 fillRect 等,都是立刻向屏幕輸出的,他們沒有繪制路徑這個概念

 

下面的代碼將繪制一個簡單的填充三角形。

注意:繪制三角形的時候,默認的背景色為白色,默認的前景色為黑色
設置畫布

復制代碼
代碼如下:

<canvas id="test2" width="200" height="200" style="border:1px solid #c3c3c3;">你的瀏覽器不支持 &lt;canvas&gt;標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器</canvas>
<input type="button" value="畫三角" onclick="drawTri();"/>
<input type="button" value="清除" onclick="clearTri();"/>



繪制三角形

復制代碼
代碼如下:

<script type="text/javascript">
function drawTri(){
var canvas = document.getElementById('test2');
var ctx=canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(75,50);
ctx.lineTo(100,75);
ctx.lineTo(100,25);
ctx.fill();
}
function clearTri(){
var canvas = document.getElementById('test2');
var ctx=canvas.getContext("2d");
ctx.clearRect(0,0,200,200);
}
</script>

你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

 

六、半個單位的坐標

里還要回過頭來說說坐標,下面的代碼是在畫布上繪制網格,點擊“畫網格”按鈕可以看見效果
設置畫布

復制代碼
代碼如下:

<canvas id="test2" width="200" height="200" style="border:1px solid #c3c3c3;">你的瀏覽器不支持 &lt;canvas&gt;標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器</canvas>
<input type="button" value="畫三角" onclick="drawTri();"/>
<input type="button" value="清除" onclick="clearTri();"/>



繪制三角形

復制代碼
代碼如下:

<script type="text/javascript">
function drawTri(){
var canvas = document.getElementById('test2');
var ctx=canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(75,50);
ctx.lineTo(100,75);
ctx.lineTo(100,25);
ctx.fill();
}
function clearTri(){
var canvas = document.getElementById('test2');
var ctx=canvas.getContext("2d");
ctx.clearRect(0,0,200,200);
}
</script>

你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

 

這段代碼中,有一處奇怪的地方,就是坐標循環是從0.5開始的,這是為什么呢?

如下圖,假如我想繪制一條從(1,0)到(1,3)的線,由于線的默認寬度是一個像素,所以在我想象中應該繪制成深綠色的部分,即在坐標 1 兩邊各占半個像素的寬度。

然而,瀏覽器的最小單位是一個像素,所以他會向兩邊擴展,實際繪制出來的淺綠色的部分,即占用了兩個像素的寬度。這樣,我們繪制的線條在坐標上就不精確了

如下圖,如果我們給出的起始坐標是(1.5,0)和(1.5,3),那么線條的寬度才是正確的一個像素。

 

 

七、清空畫布

上面給出的兩段代碼中,我們都用到了清空畫布,用到的方法如下:

clearRect(x,y,width,height):

它接受四個參數, x 和 y 指定矩形左上角(相對于原點)的位置,width 和 height 是矩形的寬和高。調用該方法會將給出的矩形區域中所有繪制圖形都清空,露出畫布的背景

標簽:廣西 松原 蚌埠 阿克蘇 鄂爾多斯 廣東 果洛 常德

巨人網絡通訊聲明:本文標題《HTML5邊玩邊學(2)基礎繪圖實現方法》,本文關鍵詞  HTML5,邊玩,邊學,基礎,繪圖,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5邊玩邊學(2)基礎繪圖實現方法》相關的同類信息!
  • 本頁收集關于HTML5邊玩邊學(2)基礎繪圖實現方法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91福利社在线观看| 97精品国产露脸对白| 欧美日韩免费观看一区二区三区 | 94色蜜桃网一区二区三区| 国产欧美精品一区二区色综合朱莉| 国产麻豆欧美日韩一区| 国产精品久久久久久亚洲毛片 | 国产精品456露脸| 中文字幕av不卡| 色婷婷精品久久二区二区蜜臂av | 亚洲天堂网中文字| 色婷婷国产精品| 日本91福利区| www日韩大片| 99精品热视频| 亚洲午夜免费电影| 欧美变态tickling挠脚心| 久久精品国产第一区二区三区| 精品国产乱码久久久久久老虎| 免费在线观看一区| 国产欧美视频在线观看| 色婷婷激情久久| 久久aⅴ国产欧美74aaa| 中文字幕一区二区三区不卡在线| 色猫猫国产区一区二在线视频| 性感美女久久精品| 日本一区免费视频| 91国产福利在线| 激情综合亚洲精品| 综合亚洲深深色噜噜狠狠网站| 色呦呦一区二区三区| 强制捆绑调教一区二区| 日本va欧美va瓶| 国产精品麻豆网站| 欧美一区日韩一区| 成人av在线资源网站| 欧美激情自拍偷拍| av不卡在线观看| 五月综合激情婷婷六月色窝| 久久久久久久精| 欧美日韩一区二区在线视频| 高清shemale亚洲人妖| 婷婷中文字幕综合| 石原莉奈一区二区三区在线观看| 欧美激情在线一区二区| 欧美一级视频精品观看| 色婷婷久久综合| 成人精品在线视频观看| 青青草国产精品97视觉盛宴| 亚洲男人的天堂一区二区| 国产日韩欧美精品一区| 日韩亚洲欧美在线观看| 欧美专区日韩专区| 成人sese在线| 国产一区二区免费在线| 麻豆91在线观看| 亚洲电影第三页| 亚洲美女电影在线| 中文字幕一区二| 国产日产欧美一区二区三区 | 美女尤物国产一区| 亚洲综合清纯丝袜自拍| 最新日韩av在线| 国产精品久久看| 国产精品免费观看视频| 久久精品亚洲精品国产欧美kt∨| 精品乱人伦小说| 日韩欧美一级二级| 日韩精品一区二区三区三区免费| 欧美性欧美巨大黑白大战| 91亚洲精品乱码久久久久久蜜桃| 国产成人精品影院| 国产伦精品一区二区三区免费迷| 老司机精品视频一区二区三区| 日韩精品一区第一页| 亚洲高清免费在线| 亚洲bt欧美bt精品| 亚洲一区二区高清| 婷婷开心久久网| 免费欧美日韩国产三级电影| 日韩电影免费在线观看网站| 亚洲欧洲综合另类| 亚洲夂夂婷婷色拍ww47| 久久综合色之久久综合| 中文字幕在线观看不卡视频| 日韩精品中文字幕在线一区| 欧美在线观看视频在线| eeuss国产一区二区三区| 久久精品99国产精品| 偷拍与自拍一区| 亚洲午夜免费福利视频| 中文字幕一区二区不卡| 精品福利二区三区| 亚洲精品在线三区| jlzzjlzz国产精品久久| av日韩在线网站| 91免费在线看| 欧美日韩一区二区欧美激情| 这里只有精品免费| 精品av综合导航| 国产精品网站导航| 悠悠色在线精品| 蜜桃传媒麻豆第一区在线观看| 日韩成人伦理电影在线观看| 国产在线视频一区二区三区| 国产+成+人+亚洲欧洲自线| 色域天天综合网| 欧美一区二区三区精品| 国产欧美一区二区精品仙草咪| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产日韩在线一区模特 | 欧美经典一区二区| 亚洲激情五月婷婷| 精品在线观看免费| 94-欧美-setu| 精品美女一区二区三区| 国产精品国产馆在线真实露脸| 午夜精品福利久久久| 豆国产96在线|亚洲| 欧洲生活片亚洲生活在线观看| 精品理论电影在线观看| 亚洲欧美一区二区三区极速播放 | 免费观看日韩av| 99久久精品费精品国产一区二区| 9191国产精品| 亚洲特级片在线| 国产综合色在线| 欧美蜜桃一区二区三区| 中文字幕欧美三区| 美女视频黄频大全不卡视频在线播放 | 成人午夜免费电影| 欧美一区二区三区免费视频| 亚洲欧美日韩一区二区三区在线观看| 麻豆精品视频在线观看| 日本久久一区二区三区| 国产欧美日本一区视频| 麻豆成人av在线| 欧美日韩mp4| 亚洲精品精品亚洲| 波多野结衣在线一区| 精品国产91乱码一区二区三区| 亚洲成av人在线观看| 99久久国产综合精品色伊| 国产亚洲污的网站| 久久99热国产| 欧美精品123区| 亚洲一区免费视频| 欧美自拍丝袜亚洲| 亚洲日本青草视频在线怡红院| 国产精品羞羞答答xxdd| 26uuu欧美| 美女一区二区在线观看| 91精品国产综合久久国产大片| 一区二区不卡在线播放| 色婷婷一区二区三区四区| 日韩理论片中文av| 国产成人亚洲综合a∨婷婷图片| 91精品国产福利在线观看| 久久久影视传媒| 久久精品国产亚洲5555| 欧美日韩另类国产亚洲欧美一级| 一区二区三区毛片| 99久久精品免费观看| 久久久久亚洲蜜桃| 亚洲免费在线观看| 日本高清不卡视频| 中文字幕一区三区| 国产成人超碰人人澡人人澡| 国产精品无人区| 国产另类ts人妖一区二区| 日韩一卡二卡三卡国产欧美| 亚洲一线二线三线视频| 欧美系列日韩一区| 亚洲美女免费在线| 91色porny| 午夜精品aaa| 欧美日韩成人综合天天影院| 亚洲综合丝袜美腿| 91麻豆国产在线观看| 亚洲国产综合人成综合网站| 欧洲人成人精品| 亚洲成人黄色影院| 精品少妇一区二区三区日产乱码 | 亚洲18影院在线观看| 欧美绝品在线观看成人午夜影视| 亚洲国产日产av| 欧美性受极品xxxx喷水| 亚洲精品美国一| 色噜噜狠狠成人网p站| 亚洲一区免费观看| 欧美巨大另类极品videosbest | 99久久99精品久久久久久| 亚洲国产精品99久久久久久久久| 成人深夜福利app| 国产日韩视频一区二区三区| 国产成人三级在线观看| 亚洲丝袜自拍清纯另类| 91麻豆高清视频| 美女被吸乳得到大胸91| 久久久久国产精品人|