Html5 Canvas介紹

来源:https://www.cnblogs.com/ComputerPlayerJs/archive/2019/03/11/10508772.html
-Advertisement-
Play Games

1. 獲取繪圖上下文 var mycanvas = document.getElementById('mycanvas'); var context = mycanvas.getContext('2d'); 2. 繪圖函數 註:x = positionX y= position Y w = widt ...


1. 獲取繪圖上下文

  var mycanvas = document.getElementById('mycanvas');

  var context = mycanvas.getContext('2d');

2. 繪圖函數

    註:x = positionX y= position Y w = width h = height

    繪製矩形:

      strokeRect(x,y,w,h); -----邊框矩形

      fillRect(x,y,w,h); ----填充矩形

    清除區域:

      clearRect(x,y,w,h);

    繪製路徑:

      beginPath();清楚路徑列表,每次繪製新的形狀之前都要調用

      moveTo();開始繪製的坐標

      lineTo();繪製到哪裡

      closePath();關閉路徑形成閉合的圖形,如果不想形成閉合圖形就不需要添加

      stroke();執行描邊,連線!!!!!!!!!!!!

      strokeStyle = '(十六進位顏色值)或(顏色英文拼寫)';  設置描邊顏色

      lineWidth();設置描邊線條的粗細

      fillStyle = '(十六進位顏色值)或(顏色英文拼寫)'; 設置填充顏色

      fill(); 執行填充

    繪製弧形:

      註:弧度 = 角度 * (Math.PI / 180)

      arc(x,y,radius(半徑),startAngle(起始弧度),endAngle(終止弧度),counterclockwise(是否逆時針繪製));

      arcTo(x1,y1,x2,y2,ridius(弧的半徑,半徑小則離切線角越近));

      

    繪製2次貝塞爾曲線:

      quadraticCurveTo(cpx(控制點坐標x),cpy(控制點坐標y),x(末端點x),y(末端點y));

      與moveTo();的起始點配合使用。

    繪製三次貝塞爾曲線:

      bezierCurveTo(cpx1,cpy1,cpx2,cpy2,x,y); 有兩個控制點,最後的x,y是結束點。

      與moveTo();的起始點配合使用。

  clip();定義遮罩層,只能顯示遮罩層之間的內容

  透明度:使用rgba();

  線性漸變色:

    var  grandient = createLinearGradient(startX,startY,endX,endY) ;定義漸變區間

    grandient.addColorStop(0(比例),"blue");

    grandient.addColorStop(0.5(比例),"red");

    ctx.fillStyle = grandient;

    ctx.fill();

  放射漸變:

    var g = createRadialGradient(x1,y1,r1,x2,y2,r2); 兩個圓的相交區域為漸變區間

    g.addColorStop();

    ……

    ctx.fillStyle = g;

    ctx.fill();

例子:繪製撞球桌:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5     <title></title>
 6     </head>
 7     <body style="text-align: center;">
 8         <canvas id="mycanvas" width="500" height="500"/>
 9     </body>
10     <script type="text/javascript">
11         var mycanvas = document.getElementById('mycanvas');
12         var ctx = mycanvas.getContext('2d');
13         ctx.beginPath();
14         ctx.fillStyle = "#00ff00";
15         ctx.fillRect(0,0,500,500);
16 
17         //繪製白球
18         DrawWhiteTableBall(50,250,ctx);
19 
20         //繪製紅球組
21         DrawRedTableBall(300,250,ctx);
22 
23         DrawRedTableBall(335,230,ctx);
24         DrawRedTableBall(335,270,ctx);
25 
26         DrawRedTableBall(370,210,ctx);
27         DrawRedTableBall(370,250,ctx);
28         DrawRedTableBall(370,290,ctx);
29 
30         DrawRedTableBall(405,190,ctx);
31         DrawRedTableBall(405,230,ctx);
32         DrawRedTableBall(405,270,ctx);
33         DrawRedTableBall(405,310,ctx);
34 
35         function DrawRedTableBall(positionX,positionY,ctx){
36             ctx.beginPath();
37             ctx.arc(positionX,positionY,20,0,360*Math.PI/180,false);
38             var g = ctx.createRadialGradient(positionX-4,positionY-4,5,positionX,positionY,20);
39             g.addColorStop(0,"#ffffff");
40             g.addColorStop(1,"#ff0000");
41             ctx.fillStyle = g;
42             // ctx.fillRect(positionX,positionY,positionX+20,positionY+20);
43             ctx.fill();
44         }
45 
46         function DrawWhiteTableBall(positionX,positionY,ctx){
47             ctx.beginPath();
48             ctx.arc(positionX,positionY,20,0,360*Math.PI/180,false);
49             var g = ctx.createRadialGradient(positionX-4,positionY-4,5,positionX,positionY,20);
50             g.addColorStop(0,"rgba(255,255,255,1)");
51             g.addColorStop(1,"rgba(255,255,255,0.8)");
52             ctx.fillStyle = g;
53             ctx.fill();
54             // ctx.fillRect(positionX,positionY,positionX+20,positionY+20);
55         }
56     </script>
57 </html>

 放射漸變的理論參考這個大佬的講解,寫的很清楚:

  https://www.cnblogs.com/tianma3798/p/5895811.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JQuery,ready,window.onload,選擇器,載入。 ...
  • 什麼是Loader? 繼上兩篇文章webpack工作原理介紹( "上篇" 、 "下篇" ),我們瞭解到 ,而且每個Loader的職責都是單一,只會完成一種轉換,所以我們一般對源文件的處理,也是由多個Loader以鏈式順序執行的方式來進行多次裝換,然後得到我們要的結果。 那麼這樣Loader只需要關心 ...
  • 系列前文: "JavaScript實現ZLOGO子集: 前進+轉向" "JavaScript實現ZLOGO子集: 單層迴圈功能" "JavaScript實現ZLOGO子集: 測試用例" "JavaScript實現ZLOGO: 用語法樹實現多層迴圈" 功能上, 添加了螞蟻圖標顯示當前前進方向, 並可通 ...
  • 把基礎部分,再次系統的瞭解一遍,整理成文檔。 ...
  • 在Vue開發過程中,子組件向父組件傳值的過程中,函數時可以對應的觸發的,但是當父組件要改變自己的屬性的時候報錯了。 具體的頁面邏輯是這樣的,父組件 子組件 點擊了之後沒有問題,子組件向父組件傳值 this.$emit()也能對應的觸發,但是當父組件的 this改變自己data裡面定義的屬性的時候就會 ...
  • 續上文 "VS Code英漢詞典插件v0.0.6 改為TS實現, 加測試" 後, 繼續重構(提取常量, 避免var, 添加類型等等), 並完善測試. 測試方法參考: "Testing Visual Studio Code Extensions" , 調試也支持. 覺得雖然啟動測試有一定開銷(似乎必需 ...
  • 就是把自己做出來的東西分享給大家 ...
  • 轉: https://www.cnblogs.com/gaoht/p/9850449.html 在數組對象中去掉重覆的對象: eg: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...