1. 程式人生 > >HTML之Canvas標籤及對應屬性、API詳解

HTML之Canvas標籤及對應屬性、API詳解

聽說HTMl很火,自己也是借了幾本書,想深刻了解一下,翻書一看,又驚又喜,這不是在大學還學過半年呢嘛,畢業設計就是和這個網頁設計相關的,正好,前邊幾章大致翻閱一下複習,著重看了後邊的章節,今天看了一個canvas標籤,感覺挺有用的,其實知識都是一樣的,我現在在做iOS開發,也經常會用到劃線方法,DrawInRect,CGContext等,和這個Canvas是非常相似的,自己也是寫了點demo,程式碼片段和大家分享一下:

標籤:

知識說明:

       HTML5新增的canvas標籤,通過建立畫布,在畫布上建立任何想要的形狀,下面將canvas的API以及屬性做一個整理,並且附上時鐘的示例,便於後期複習學習!Fighting!

一、標籤原型

<canvas width=”1000” height=”1000” id=”myCanvas”>

       您的瀏覽器版本過低,不支援HTML5新增的canvas標籤。

</canvas>

使用js獲取該畫布,並指定物件

<script>

       Var canvasID = document.getElementById(“myCanvas”);

       Var canvas = canvasID.getContext(“2d”);

</script>

二、canvas標籤常見屬性

屬性

功能描述

width

pixels

設定canvas的寬度

height

pixels

設定canvas的高度

三、canvas標籤的API整合

屬性

功能描述

save()

Canvas.save();

儲存當前畫布環境狀態

Restore()

Canvas.restore();

返回之前儲存的畫布的路徑狀態,與save()成對用

getContext()

Canvas.getContext();

返回一個物件,指出訪問繪圖功能必要的API

toDataURL()

Canvas.toDataURL();

返回canvas影象的url

四、canvas標籤API的主要屬性整合

a、 畫圓

屬性

功能描述

fillStyle

Canvas.fillStyle=”#f00”

設定或返回用於填充繪畫的顏色、漸變或模式

strokeStyle

Canvas.strokeStyle=”#f0f”;

設定或返回用於筆觸的顏色、漸變或模式

beginPath()

Canvas.beginPath();

開啟畫路徑

closePath()

Canvas.closePath();

關閉畫路徑

Arc()

Canvas.arc(0,0,10,0,360,false);

引數:原點X、原點Y、原點起始弧度,原點結束弧度、順時針/逆時針

畫圓

Fill()

Canvas.fill()

填充

Stroke()

Canvas.stroke()

畫邊框

畫圓程式碼片段:

<script>

              var canvasID = document.getElementById("myCanvas");

              var canvas = canvasID.getContext("2d");

              //畫圓方法

              function drawArc(id)

              {

                     canvas.beginPath();

                     canvas.lineWidth = 5;

                     canvas.fillStyle = "#00f";

                     canvas.strokeStyle = "#0f0";

                     canvas.arc(100, 100, 50, 0, 360, false);

                     canvas.fill();

                     canvas.stroke();

                     canvas.closePath();

              }

              drawArc("myCanvas");

       </script>

b、 畫線

屬性

功能描述

Translate

Canvas.translate(200,200)

重置座標原點

lineWidth

Canvas. lineWidth=10;

設定線的寬度

moveTo ()

Canvas. moveTo (0,0);

開始畫線的初始位置

lineTo ()

Canvas. lineTo (100,0);

畫線結束點位置

畫線程式碼片段:

<script>

              var canvasID = document.getElementById("myCanvas");

              var canvas = canvasID.getContext("2d");

              function drawLine(id)

              {

                     canvas.save();

                     canvas.translate(150,100);

                     canvas.lineWidth= 10;

                     canvas.strokeStyle = "#999";

                     canvas.beginPath();

                     canvas.moveTo(0,0);

                     canvas.lineTo(100,0);

                     canvas.closePath();

                     canvas.stroke();

                     canvas.restore();

              }

              drawLine("myCanvas");

</script>

c、 畫多邊形

畫三角形程式碼片段:

//畫多邊形,此處以三角形為例

<script>

        var canvasID = document.getElementById("myCanvas");

        var canvas = canvasID.getContext("2d");

        function drawSanjiao(id)

        {

               canvas.save();

               canvas.translate(250,40);

               canvas.lineWidth = 3;

               canvas.strokeStyle = "#0f0";

               canvas.beginPath();

               canvas.moveTo(0,0);

               canvas.lineTo(0,120);

               canvas.lineTo(100,60);

               canvas.lineTo(0,0);

               canvas.stroke();

               canvas.closePath();

               canvas.restore();

        }

        drawSanjiao("myCanvas");

</script>

d、 畫文字

畫文字程式碼片段:

<script>

        var canvasID = document.getElementById("myCanvas");

        var canvas = canvasID.getContext("2d");

function drawText(id)

        {

               canvas.save();

               canvas.translate(100,300);

               canvas.strokeStyle="#09";

               canvas.fillStyle = "#879";

               canvas.font = "normal 90px 微軟雅黑";

               canvas.strokeText("hello html5", 0, 0);

               canvas.fillText("hello html5", 0, 0);

               canvas.restore();

        }

        drawText("myCanvas");

</script>

以上a、b、c、d整合效果如下圖:

技術分享

五、使用canvas標籤繪製時鐘

程式碼片段:

<canvas width="1000" height="1000" id="clockCanvas">

      您的瀏覽器版本太低,不支援顯示時鐘的canvas標籤

</canvas>

       <script>

              var clockID = document.getElementById("clockCanvas");

              var clock = clockID.getContext("2d");

              /*步驟:畫鐘錶整體思路步驟分析

              1、使用canvas建立畫布,並建立一個2d物件

              2、使用function方法做計算

              3、例項化Date()物件,通過該物件獲取系統當前的時、分、秒

              4、通過計算將24小時制轉化為12小時制

              5、畫表盤

              6、畫刻度盤

              7、畫指標

              8、使用setInterval(fun, time);設定動態

              */

              //畫時鐘的方法

              function drawClock(id)

              {

                     //每次清空畫布

                     clock.clearRect(0,0,1000,1000);

                     //獲取系統當前時間(時 、分 、秒)

                     var now = new Date();  //例項化一個當前時間的物件,通過該物件獲取系統當前時間

                     var sec = now.getSeconds();  //秒

                     var mins = now.getMinutes();  //分

                     var hours = now.getHours();    //時

                     //繪製文字,顯示系統當前時間:

                     clock.save();

                     clock.translate(0,500);

                     clock.fillStyle = "#ff0";

                     clock.strokeStyle = "#eee";

                     clock.font = "bold 50px 微軟雅黑";

                     clock.strokeText("系統當前時間為:"+hours+"時"+mins+"分"+sec+"秒", 100, 100);

                     clock.fillText("系統當前時間為:"+hours+"時"+mins+"分"+sec+"秒", 100, 100);

                     clock.restore();

                     //計算:滿60分加一小時

                     hours = hours + mins/60;

                     //計算:將24小時制轉化為12小時制

                     hours = hours>12?hours-12:hours;

                     //畫表盤

                     clock.beginPath();

                     clock.lineWidth = 10;

                     clock.strokeStyle = "#ff00ff";

                     clock.arc(300, 300, 200, 0, 360, false);

                     clock.stroke();

                     clock.closePath();

                     //畫刻度盤

                     //時刻度

                     for(var i = 0; i < 12; i++)

                     {

                            clock.save();

                            //將起始點定位到圓心

                            clock.translate(300,300);

                            //設定刻度的樣式

                            clock.lineWidth = 7;

                            clock.strokeStyle = "#999999";

                            //設定旋轉角度

                            clock.rotate(i*30*Math.PI/180);

                            clock.beginPath();

                            clock.moveTo(0, -170);

                            clock.lineTo(0, -190);                     

                            /*clock.font = "normal 20px 宋體";

                            clock.textAlign = "left";

                            clock.textBaseLine = "top";

                            clock.strokeText(i, i*(-50)*Math.PI/180, -150);

                            clock.closePath();*/

                            //畫刻度線

                            clock.stroke();

                            clock.restore();

                     }

                     //分刻度

                     for(var j = 0; j<60; j++)

                     {

                            clock.save();

                            //設定起始點座標

                            clock.translate(300,300);

                            clock.lineWidth = 5;

                            clock.strokeStyle = "#999999";

                            //設定旋轉角度

                            clock.rotate(j*6*Math.PI/180);

                            clock.beginPath();

                            clock.moveTo(0, -180);

                            clock.lineTo(0, -190);

                            clock.closePath();

                            clock.stroke();

                            clock.restore();

                     }

                     //時針

                     clock.save();

                     clock.translate(300,300);

                     clock.lineWidth = 7;

                     clock.strokeStyle = "#000000";

                     //設定小時的旋轉角度,沒轉一次走30°

                     clock.rotate(hours*30*Math.PI/180);                

                     clock.beginPath();

                     clock.moveTo(0,15);

                     clock.lineTo(0,-120);

                     clock.stroke();

                     clock.closePath();

                     clock.restore();

                     //分針

                     clock.save();

                     clock.translate(300, 300);

                     clock.rotate(mins*6*Math.PI/180);

                     clock.lineWidth = 5;

                     clock.strokeStyle = "#000";

                     clock.beginPath();

                     clock.moveTo(0,20);

                     clock.lineTo(0,-160);

                     clock.stroke();

                     clock.closePath();

                     clock.restore();

                     //秒針

                     clock.save();

                     clock.translate(300,300);

                     clock.rotate(sec*6*Math.PI/180);

                     clock.lineWidth = 3;

                     clock.strokeStyle = "#f00";

                     clock.beginPath();

                     clock.moveTo(0, 25);

                     clock.lineTo(0,-165);

                     clock.stroke();

                     clock.closePath();

                     //秒針圓心處一個小圈

                     clock.fillStyle = "#999";

                     clock.strokeStyle = "#f00";

                     clock.beginPath();

                     clock.arc(0,0,6,0,360,false);

                     clock.fill();

                     clock.stroke();

                     clock.closePath();

                     //秒針頂部一個小圈

                     clock.beginPath();

                     clock.arc(0,-140,6,0,360,false);

                     clock.fill();

                     clock.stroke();

                     clock.closePath();

                     clock.restore();

              }

              drawClock();

              setInterval(drawClock, 1000);  //是錶針根據系統當前時間轉動起來

       </script>

繪製結果如下圖:

技術分享

Hope To Help You !

技術交流群:141624834 進群請說你看的那篇部落格,我們一起探討成長



相關推薦

HTMLCanvas標籤對應屬性API

聽說HTMl很火,自己也是借了幾本書,想深刻了解一下,翻書一看,又驚又喜,這不是在大學還學過半年呢嘛,畢業設計就是和這個網頁設計相關的,正好,前邊幾章大致翻閱一下複習,著重看了後邊的章節,今天看了一個canvas標籤,感覺挺有用的,其實知識都是一樣的,我現在在做iOS開發,

2 類實例屬性方法

obj tps 圖片 AD lex 間接 年齡 AS 其它 類的語法 上面的代碼其實有問題,屬性名字和年齡都寫死了,想傳名字傳不進去。 1 class Person(object): 2   def __init__(self, name, age): 3     se

MybatisMapper介面Example例項函式使用

宣告:本文章部分內容源自於CSDN博主biandous的部落格文章,在其基礎上進行了部分修正和程式碼修改。 一、Mapper介面方法 方法 功能說明 int countByExample(UserExample example) throws SQLExce

HTML中select標籤單選多選用法

/@param fromObjSelectId 移動item的原select元件id @param toObjectSelectId 移動item將要進入的目標select元件id/ function move1() { var objSelect = doc

Redis從入門到熟練使用測試哨兵主從高可用(,第四篇,共五篇)

測試驗證 首先檢視哨兵監控情況 然後嘗試關閉主機 再檢視剩餘2個從機,這裡會自動選舉產生新的主機 然後,我們再次將剛才停止的主機啟動起來,發現啟動後其自動成為從機 停掉master_redis主資料庫後重啟後變成從資料庫。隨機推選。 至此,

微信小程式邏輯層(JS)路由+模組化+API

本章節按照微信文件講述 紅色框裡的內容 一.路由 頁面路由 在小程式中所有頁面的路由全部由框架進行管理。 1.頁面棧 getCurrentPages() getCurr

C# 正則表示式html匹配input標籤匹配input的value獲取aspnet頁面VIEWSTATEEVENTVALIDATION的UI狀態儲存值

1、使用正則表示式從html內容中獲取 input 標籤,然後從 input 標籤中獲取屬性值; 也可以使用正則表示式捕獲組獲取value,在2中說明 using System.Text.RegularExpressions; string excelHtml = divMX.Inne

Android自學筆記ProgressBar進度條的屬性常用方法使用

1,屬性:   android:progress="0"  ----設定第一層進度條的初始值  android:max="100"  ---設定進度條的最大值  android:secondaryPr

AngularJS語法基礎數據綁定——各種數據綁定指令屬性應用

har 用戶 添加 雙向 技巧 title 程序 詳細 allow   AngularJS簡單易學,但是功能強大。特別是在構建單頁面應用方面效果顯著。而 數據綁定 可以說是他被廣泛使用的最主要的優點。他舍棄了對DOM的操作方式,一切都由AngularJS來自動更新視圖,我們

【Unity Shader】(八) ------ 高階紋理立方體紋理光線反射折射的實現

筆者使用的是 Unity 2018.2.0f2 + VS2017,建議讀者使用與 Unity 2018 相近的版本,避免一些因為版本不一致而出現的問題。      【Unity Shader】(三) ------ 光照模型原理及漫反射和

【Unity Shader】(八) ------ 高級紋理立方體紋理光線反射折射的實現

int rap 原理 src 靜態 toc lighting ati orm 筆者使用的是 Unity 2018.2.0f2 + VS2017,建議讀者使用與 Unity 2018 相近的版本,避免一些因為版本不一致而出現的問題。 【Unity Shade

html中input標籤的tabindex屬性

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

大資料系列——hive(七hive應用)

目錄 2.HQL 一、HIVE概述 1.Hadoop分散式計算遇到的問題 MapReduce只能用java開發(也支援其他語言,但是不是主流)需要對Hadoop的底層原理 api比較瞭解才能順暢的開發出分散式的處

HTML中img標籤的src屬性絕對路徑問題解決辦法,完全解決!

需求:有時候自己的專案img的src路徑需要用到本地某資料夾下的圖片,而不是直接使用專案根目錄下的圖片。 場景:eclipse,tomcat,html,img,src,java 注意:不需要尋找tomcat真實路徑下的server.xml去修改,這個地方不需要修改。 解決辦法:1、在ec

html input標籤height設定問題

今天針對這個問題糾結了很久 1 <input type="button" value="xx" style="height:99px;" /></body> 通常大家都覺得這麼設定,按鈕的高度也是99px,因為設定width及color樣式都能生效,唯獨高度不生效,最終才

Maven——外掛目標繫結命令列呼叫外掛目標字首(外掛字首解析策略)外掛解析執行機制

1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!-- 4 Licensed to the Apache Software Foundation (ASF) under one 5 or more contributor li

ArcGIS API For Javascript呼叫動態地圖服務+屬性空間查詢

1.引言       在本篇部落格中主要記錄一下在ArcGIS API如何呼叫自己釋出的動態地圖服務,利用動態地圖服務我們可以完成哪一些需求等等。 注:(如何利用ArcGIS Server釋出動態地圖服務請看部落格ArcGIS Server釋出動態地圖服務), 2.呼叫動態地

HTML5繪圖Canvas標籤 繪製座標軸

因為最近在做資料的統計,需要表現在網頁上 也查過一些外掛和一些繪圖語言,學習時間成本太高,所以用上了HTML5的Canvas標籤和JavaScript,可以很快的滿足我需要的繪圖需求 JavaScript中前兩句: var canvas1=docume

關於html頁面img標籤中src屬性的理解

今天在練習SSM框架時,接觸到了關於html頁面中圖片的引用,因為案例中採用的是作者自己的絕對路徑,雖然這種方法也沒問題,但採用相對路徑應該會更完美,也能加深自己對相對路徑的熟悉。於是百度了一下,得到如下總結,記錄之,方便後續檢視。 圖片檔案和html檔案在同一路徑下

html中select標籤的常用屬性

<html> <body> <select multiple="multiple" size="2"> <option title="aa">aa</option> <option title="b