婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 利用HTML5 Canvas API繪制矩形的超級攻略

利用HTML5 Canvas API繪制矩形的超級攻略

熱門標簽:杭州營銷電銷機器人供應商 聯通400電話申請 電話機器人如何 飛亞外呼系統 貸款電銷人工和機器人哪個好 百應電銷機器人產業 西寧智能外呼系統加盟 電視購物電銷外呼系統 高德地圖標注賓館位置

使用closePath()閉合圖形
首先我們用最普通的方法繪制一個矩形。

JavaScript Code復制內容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="en">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title></title>   
  6. </head>   
  7. <body>   
  8. <!DOCTYPE html>   
  9. <html lang="zh">   
  10. <head>   
  11.     <meta charset="UTF-8">   
  12.     <title>繪制矩形</title>   
  13. </head>   
  14. <body>   
  15. <div id="canvas-warp">   
  16.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  17.         你的瀏覽器居然不支持Canvas?!趕快換一個吧!!   
  18.     </canvas>   
  19. </div>   
  20.   
  21. <script>   
  22.     window.onload = function(){   
  23.         var canvas = document.getElementById("canvas");   
  24.         canvas.width = 800;   
  25.         canvas.height = 600;   
  26.         var context = canvas.getContext("2d");   
  27.   
  28.         context.beginPath();   
  29.         context.moveTo(150,50);   
  30.         context.lineTo(650,50);   
  31.         context.lineTo(650,550);   
  32.         context.lineTo(150,550);   
  33.         context.lineTo(150,50);     //繪制最后一筆使圖像閉合   
  34.         context.lineWidth = 5;   
  35.         context.strokeStyle = "black";   
  36.         context.stroke();   
  37.   
  38.     }   
  39. </script>   
  40. </body>   
  41. </html>   
  42. </body>   
  43. </html>  

運行結果:

乍一看沒啥問題,但是視力好的童鞋已經發現了,最后一筆閉合的時候有問題,導致左上角有一個缺口。這種情況是設置了lineWidth導致的。如果默認1筆觸的話,是沒有問題的。但是筆觸越大,線條越寬,這種缺口就越明顯。那么這種情況該怎么避免呢?
標題已經劇透了,使用clothPath()閉合圖形。

JavaScript Code復制內容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>繪制矩形</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個吧!!   
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         context.beginPath();   
  22.         context.moveTo(150,50);   
  23.         context.lineTo(650,50);   
  24.         context.lineTo(650,550);   
  25.         context.lineTo(150,550);   
  26.         context.lineTo(150,50);     //最后一筆可以不畫   
  27.         context.closePath();        //使用closePath()閉合圖形   
  28.   
  29.         context.lineWidth = 5;   
  30.         context.strokeStyle = "black";   
  31.         context.stroke();   
  32.   
  33.     }   
  34. </script>   
  35. </body>   
  36. </html>   
  37. </body>   
  38. </html>  

運行結果:

這個例子結合上節課的講解,我們知道了繪制路徑的時候需要將規劃的路徑使用beginPath()與closePath()包裹起來。當然,最后一筆可以不畫出來,直接使用closePath(),它會自動幫你閉合的。(所以如果你不想繪制閉合圖形就不可以使用closePath())

給矩形上色
這里我們要介紹一個和stroke()同等重要的方法fill()。和當初描邊一樣,我們在填色之前,也要先用fillStyle屬性選擇要填充的顏色。
比如我們要給上面的矩形涂上黃色,可以這樣寫。

JavaScript Code復制內容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>繪制矩形</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個吧!!   
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         context.beginPath();   
  22.         context.moveTo(150,50);   
  23.         context.lineTo(650,50);   
  24.         context.lineTo(650,550);   
  25.         context.lineTo(150,550);   
  26.         context.lineTo(150,50);     //最后一筆可以不畫   
  27.         context.closePath();        //使用closePath()閉合圖形   
  28.   
  29.         context.fillStyle = "yellow";   //選擇油漆桶的顏色   
  30.         context.lineWidth = 5;   
  31.         context.strokeStyle = "black";   
  32.   
  33.         context.fill();                 //確定填充   
  34.         context.stroke();   
  35.   
  36.     }   
  37. </script>   
  38. </body>   
  39. </html>   
  40. </body>   
  41. </html>   
  42.   

運行結果:

這里需要注意的是一個良好的編碼規范。因為之前說過了Canvas是基于狀態的繪制,只有調用了stroke()和fill()才確定繪制。所以我們要把這兩行代碼放在最后,其余的狀態設置的代碼放在它們之前,將狀態設置與確定繪制的代碼分隔開。增強代碼的可讀性。


封裝繪制方法
大家一定發現了,繪制矩形其實都是這樣的四筆,我們每次用這種笨方法畫矩形都要畫這四筆有多麻煩,如果我們要花10個矩形?100個?1000個?都這樣寫,代碼會臃腫,復用性很低。這里,我們可以使用JavaScript封裝這些方法。我們知道,一個矩形可以由它的左上角坐標和其長寬唯一確定。
JavaScript函數
這里我們介紹一下JavaScript函數。如果有基礎的同學可以跳過這一大段,直接看后面的。
JavaScript 和 ActionScript 語言的函數聲明調用一樣,都是編程語言中最簡單的。
函數的作用
函數的作用,可以寫一次代碼,然后反復地重用這個代碼。如:我們要完成多組數和的功能。

JavaScript Code復制內容到剪貼板
  1. var sum;      
  2. sum = 3+2;   
  3. alert(sum);   
  4.   
  5. sum=7+8 ;   
  6. alert(sum);    
  7.   
  8. ....  //不停重復兩行代碼   
  9.   

如果要實現8組數的和,就需要16行代碼,實現的越多,代碼行也就越多。所以我們可以把完成特定功能的代碼塊放到一個函數里,直接調用這個函數,就省去重復輸入大量代碼的麻煩。
使用函數完成:

JavaScript Code復制內容到剪貼板
  1. function add2(a,b){   
  2.     sum = a + b;   
  3.      alert(sum);   
  4. //  只需寫一次就可以   
  5.   
  6. add2(3,2);   
  7. add2(7,8);   
  8. ....  //只需調用函數就可以   
  9.   

定義函數
如何定義一個函數呢?看看下面的格式:

JavaScript Code復制內容到剪貼板
  1. function  函數名( )   
  2. {   
  3.      函數體;   
  4. }   

function定義函數的關鍵字,“函數名”你為函數取的名字,“函數體”替換為完成特定功能的代碼。
函數調用
函數定義好后,是不能自動執行的,需要調用它,直接在需要的位置寫函數名。一般有兩種方式:

第一種情況:在<script>標簽內調用。

JavaScript Code復制內容到剪貼板
  1. <script>   
  2. function tcon()   
  3. {   
  4.     alert("恭喜你學會函數調用了!");   
  5. }   
  6. tcon();    //調用函數,直接寫函數名。   
  7. </script>  

第二種情況:在HTML文件中調用,如通過點擊按鈕后調用定義好的函數。

這種情況以后用到了再說。
有參數的函數
格式如下:

JavaScript Code復制內容到剪貼板
  1. function 函數名(參數1,參數2)   
  2. {   
  3.      函數代碼   
  4. }  

注意:參數可以多個,根據需要增減參數個數。參數之間用(逗號,)隔開。
按照這個格式,函數實現任意兩個數的和應該寫成:

JavaScript Code復制內容到剪貼板
  1. function add2(x,y)   
  2. {   
  3.    sum = x + y;   
  4.    document.write(sum);   
  5. }  

x和y則是函數的兩個參數,調用函數的時候,我們可通過這兩個參數把兩個實際的加數傳遞給函數了。
例如,add2(3,4)會求3+4的和,add2(60,20)則會求出60和20的和。
返回值函數

JavaScript Code復制內容到剪貼板
  1. function add2(x,y)   
  2. {   
  3.    sum = x + y;   
  4.    return sum; //返回函數值,return后面的值叫做返回值。   
  5. }  

這里的return和其他語言中的一樣,但是在JS或者AS等弱類型語言中,返回值類型是不需要寫到函數聲明里的。

至此,我們把JavaScript函數也順便系統的說了一下。下面回到正題~
我們也可以封裝一下我們的矩形,代碼如下:

JavaScript Code復制內容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>封裝繪制矩形方法</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個吧!!   
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         drawRect(context, 150, 50, 50, 50, "red", 5, "blue");   
  22.         drawRect(context, 250, 50, 50, 50, "green", 5, "red");   
  23.         drawRect(context, 350, 50, 50, 50, "yellow", 5, "black");   
  24.     }   
  25.   
  26.     function drawRect(cxt, x, y, width, height, fillColor, borderWidth, borderColor){   
  27.         cxt.beginPath();   
  28.         cxt.moveTo(x, y);   
  29.         cxt.lineTo(x + width, y);   
  30.         cxt.lineTo(x + width, y + height);   
  31.         cxt.lineTo(x, y + height);   
  32.         cxt.lineTo(x, y);   
  33.         cxt.closePath();   
  34.   
  35.         cxt.lineWidth = borderWidth;   
  36.         cxt.strokeStyle = borderColor;   
  37.         cxt.fillStyle = fillColor;   
  38.   
  39.         cxt.fill();   
  40.         cxt.stroke();   
  41.     }   
  42. </script>   
  43. </body>   
  44. </html>   
  45. </body>   
  46. </html>  

運行結果:

使用rect()方法繪制矩形
猶豫繪制矩形是常用的方法,所以在Canvas API中已經幫我們封裝好了一個繪制矩形的方法——rect()。這個方法接收4個參數x, y, width, height,實際調用時也就是

JavaScript Code復制內容到剪貼板
  1. context.rect(x,y,width,height);  

基于此,我們幫剛才封裝的方法優化一下。

JavaScript Code復制內容到剪貼板
  1. function drawRect(cxt, x, y, width, height, fillColor, borderWidth, borderColor){   
  2.         cxt.beginPath();   
  3.         cxt.rect(x, y, width, height);   
  4.         //cxt.closePath();    可以不用closePath()   
  5.   
  6.         cxt.lineWidth = borderWidth;   
  7.         cxt.strokeStyle = borderColor;   
  8.         cxt.fillStyle = fillColor;   
  9.   
  10.         cxt.fill();   
  11.         cxt.stroke();   
  12. }  

調用封裝方法,繪制魔性圖像
來個有魔性的圖像~

好,我們就拿它開刀,練練手,給咱剛封裝好的方法活動活動筋骨。

JavaScript Code復制內容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>繪制魔性圖形</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個吧!!   
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         context.beginPath();   
  22.         context.rect(0, 0, 800, 600);   
  23.         context.fillStyle = "#AA9033";   
  24.   
  25.         context.fill();   
  26.   
  27.         context.beginPath();   
  28.         for(var i=0; i<=20; i++){   
  29.             drawWhiteRect(context, 200 + 10 * i, 100 + 10 * i, 400 - 20 * i, 400 - 20 * i);   
  30.             drawBlackRect(context, 205 + 10 * i, 105 + 10 * i, 390 - 20 * i, 390 - 20 * i);   
  31.         }   
  32.   
  33.         context.beginPath();   
  34.         context.rect(395, 295, 5, 5);   
  35.         context.fillStyle = "black";   
  36.         context.lineWidth = 5;   
  37.   
  38.         context.fill();   
  39.         context.stroke();   
  40.     }   
  41.   
  42.     function drawBlackRect(cxt, x, y, width, height){   
  43.         cxt.beginPath();   
  44.         cxt.rect(x, y, width, height);   
  45.   
  46.         cxt.lineWidth = 5;   
  47.         cxt.strokeStyle = "black";   
  48.   
  49.         cxt.stroke();   
  50.     }   
  51.   
  52.     function drawWhiteRect(cxt, x, y, width, height){   
  53.         cxt.beginPath();   
  54.         cxt.rect(x, y, width, height);   
  55.   
  56.         cxt.lineWidth = 5;   
  57.         cxt.strokeStyle = "white";   
  58.   
  59.         cxt.stroke();   
  60.     }   
  61. </script>   
  62. </body>   
  63. </html>   
  64. </body>   
  65. </html>  

運行結果:

是不是很有魔性?是不是非常的酷?這段代碼就不花篇幅解釋了,大家自己課下琢磨琢磨,也可以嘗試著用已經學過的知識去繪制一個酷酷的圖像。這節課內容有點多,其實也只是介紹了四個屬性和方法——closePath()、fillStyle、fill()、rect(),還有一個擴展的JavaScript函數講解。

Canvas實現圖片圓角效果
本規則適用于各種Canvas繪制的規則或不規則圖形。

Canvas實現圖片圓角的關鍵是使用“紋理填充”。

Canvas中有個名為createPattern的方法,可以讓已知尺寸的圖片元素轉換成紋理對象,作填充用。

舉個板栗,如果實現名為test.jpg的圖片圓形效果,大小100px * 100px, 則主要JS代碼如下:

JavaScript Code復制內容到剪貼板
  1. // canvas元素, 圖片元素   
  2. var canvas = document.querySelector("#canvas"), image = new Image();   
  3. var context = canvas.getContext("2d");   
  4.   
  5. image.onload = function() {   
  6.     // 創建圖片紋理   
  7.     var pattern = context.createPattern(image, "no-repeat");   
  8.     // 繪制一個圓   
  9.     context.arc(50, 50, 50, 0, 2 * Math.PI);   
  10.     // 填充繪制的圓   
  11.     context.fillStyle = pattern;   
  12.     context.fill();       
  13. };   
  14. image.src = "test.jpg";  

讓Canvas上下文的fillStyle屬性值等于這個紋理對象就可以了。

Canvas自帶的矩形繪制API是不帶圓角屬性的,因此,demo中的圓角矩形使用了自定義方法。我簡單瞅了瞅,要實現垂直、水平方向不同圓角大小略折騰,本著示意的目的,就沒大動干戈,所以demo的圓角是對稱的。

標簽:安慶 邯鄲 內蒙古 牡丹江 煙臺 玉溪 晉中 撫州

巨人網絡通訊聲明:本文標題《利用HTML5 Canvas API繪制矩形的超級攻略》,本文關鍵詞  利用,HTML5,Canvas,API,繪制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用HTML5 Canvas API繪制矩形的超級攻略》相關的同類信息!
  • 本頁收集關于利用HTML5 Canvas API繪制矩形的超級攻略的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    中文字幕精品一区| 国内精品在线播放| 欧美日本乱大交xxxxx| 激情综合网av| 洋洋成人永久网站入口| 久久精品日韩一区二区三区| 国产精品一级片在线观看| 亚洲激情综合网| 亚洲成人av电影| 免费亚洲电影在线| 韩国一区二区视频| 成人av网在线| 99国产精品一区| 成人午夜免费视频| 91无套直看片红桃| 99热国产精品| 欧美电视剧在线观看完整版| 日韩美女一区二区三区四区| 国产欧美一区二区三区网站| 一区二区视频在线| 麻豆91精品91久久久的内涵| 日韩精品91亚洲二区在线观看 | 国产在线不卡一区| 成人av高清在线| 91精品婷婷国产综合久久性色| 日韩亚洲欧美高清| 亚洲午夜在线视频| 色就色 综合激情| 亚洲欧洲在线观看av| 精品一区二区免费看| 日韩欧美色电影| 五月天丁香久久| 欧美三区免费完整视频在线观看| 国产欧美日产一区| 麻豆精品在线看| 国产三级一区二区| 欧美在线视频你懂得| 亚洲精品一区二区三区四区高清 | 一级特黄大欧美久久久| 欧美三片在线视频观看| 午夜精品在线看| 欧美日韩一区二区三区四区五区 | 视频一区视频二区在线观看| 欧美网站一区二区| 一区二区三区在线观看网站| 日韩制服丝袜av| 精品一区二区成人精品| 国产一区二区三区不卡在线观看 | 国产成人精品免费视频网站| 国产自产视频一区二区三区| 99国产欧美另类久久久精品| 91精彩视频在线观看| 日韩你懂的电影在线观看| www日韩大片| 香蕉成人伊视频在线观看| 免费观看在线色综合| 九一九一国产精品| 成人精品在线视频观看| 欧美本精品男人aⅴ天堂| 欧美大片在线观看| 亚洲一二三四在线观看| 国产91精品入口| 久久久久高清精品| 蜜臀a∨国产成人精品| 色88888久久久久久影院按摩| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品色眯眯| 粉嫩13p一区二区三区| 欧美精品一区二区三区四区| 亚洲国产视频一区二区| 在线亚洲人成电影网站色www| 久久噜噜亚洲综合| 国产在线精品国自产拍免费| 日韩限制级电影在线观看| 免费高清在线一区| 欧美日韩精品一区二区三区四区| 中文字幕一区二区不卡| 色综合色综合色综合 | 91精品国产入口在线| 一区二区三区欧美| 欧美日韩亚州综合| 免费在线视频一区| 日韩一卡二卡三卡| 日本美女一区二区| 2024国产精品| 国产一区亚洲一区| 国产精品嫩草99a| 91色综合久久久久婷婷| 亚洲色欲色欲www| 91麻豆精品91久久久久久清纯 | 2023国产精品视频| 国内外精品视频| 一区二区免费看| 91精品国产综合久久久久久漫画| 日韩黄色小视频| 国产精品久久毛片a| 欧美日韩在线播放一区| 久久国产三级精品| 国产精品电影院| 精品少妇一区二区三区在线播放| www.亚洲精品| 精品亚洲成av人在线观看| 国产午夜一区二区三区| 欧美丝袜第三区| 成人午夜免费av| 奇米777欧美一区二区| 亚洲精品国产精品乱码不99| 欧美一级黄色片| 在线看国产日韩| 色国产精品一区在线观看| 男男视频亚洲欧美| 亚洲影院免费观看| 亚洲欧洲精品成人久久奇米网| 欧美一级理论性理论a| 欧美影视一区在线| 欧美亚洲综合久久| 在线精品视频免费观看| 色婷婷综合激情| 色狠狠综合天天综合综合| 在线国产电影不卡| 欧美色图免费看| 欧美二区三区91| 精品久久久久久久久久久久包黑料 | 欧美一级日韩不卡播放免费| 欧美少妇性性性| 欧美一卡二卡三卡四卡| 久久久噜噜噜久久中文字幕色伊伊 | 久久九九国产精品| 国产精品久线在线观看| 欧美日韩一区二区三区四区五区| 欧美亚洲动漫另类| 国产日韩欧美电影| 亚洲第一在线综合网站| 国产乱码精品1区2区3区| 欧美精品黑人性xxxx| 精品国产免费久久 | 91老师片黄在线观看| 欧美日韩成人综合| 国产日韩欧美激情| 免费精品视频在线| 欧美色手机在线观看| 亚洲视频一区二区免费在线观看 | 亚洲人成亚洲人成在线观看图片| 夜夜精品视频一区二区| 激情图片小说一区| 欧美人xxxx| 青青青爽久久午夜综合久久午夜 | 色偷偷成人一区二区三区91| 91麻豆精品国产91久久久久久 | 日本美女视频一区二区| 91浏览器入口在线观看| 亚洲人成网站在线| 国产成人精品免费在线| 久久综合九色综合欧美就去吻| 亚洲风情在线资源站| 欧美高清视频在线高清观看mv色露露十八 | 亚洲欧洲在线观看av| 成人小视频在线| 精品国产网站在线观看| 一区二区三区欧美日韩| 欧美色窝79yyyycom| 婷婷夜色潮精品综合在线| 5月丁香婷婷综合| 国产不卡视频在线播放| 亚洲欧洲综合另类在线| 777亚洲妇女| 95精品视频在线| 亚洲一区在线观看视频| 91精品欧美一区二区三区综合在 | 色婷婷激情久久| 美日韩黄色大片| 中文在线一区二区| 欧美视频中文一区二区三区在线观看| 亚洲一二三级电影| 日本一区二区三区dvd视频在线| 色8久久人人97超碰香蕉987| 国产精品一区二区你懂的| 亚洲欧美另类图片小说| 亚洲欧洲成人精品av97| 欧美一级精品大片| 欧美三级午夜理伦三级中视频| 东方欧美亚洲色图在线| 老司机免费视频一区二区| 亚洲成a人v欧美综合天堂| 亚洲精品国产精华液| 亚洲天堂2014| 亚洲男女一区二区三区| 国产精品久久久久久亚洲伦| 中文在线免费一区三区高中清不卡| 精品成人免费观看| 久久久久久久久久久久电影| 欧美v日韩v国产v| 国产调教视频一区| 亚洲精品精品亚洲| 日韩成人午夜电影| 捆绑紧缚一区二区三区视频| 国内外成人在线| 欧美亚洲动漫精品| 久久天天做天天爱综合色| 国产精品美女久久久久久久久 |