Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 999久久久精品视频在线观看,亚洲影院在线播放,国产精品日韩精品

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          html5 的 Canvas介紹

          SVG是構(gòu)建XML樹的方式來達(dá)到繪制圖形的,canvas是通過調(diào)用相關(guān)的方法來繪制圖形的。

          區(qū)別:SVG繪制圖形,通過移除或者更改DOM方式來而使用canvas需要把圖片從新擦除。

          繪制的API在繪制上下文中定義。而不在畫布中定義。

          需要獲得上下文對(duì)象的時(shí)候,需要調(diào)用畫布的getContext方法,獲得繪畫的上下文。

          畫布元素和上下文,屬于兩個(gè)不同的對(duì)象,其中畫布元素為canvas畫布,而上下文對(duì)象為繪制需要的上下文。

          關(guān)于3D圖形,即,webGL 為封裝了基本的OPENGL,當(dāng)調(diào)用webGL的時(shí)候,其瀏覽器會(huì)調(diào)用OpenGL相關(guān)的API

          繪制圓

          <!DOCTYPE html>
          <html lang="zh_CN" xmlns="http://www.w3.org/1999/html">
          <head>
           <meta charset="UTF-8">
           <title>Title</title>
          </head>
          <body>
          <div>第一個(gè)園</br>
           <canvas id="square" width="10" height="100">
           </canvas>
          </div>
          <div>
           第二個(gè)園
           <canvas id="circle" width="10" height="10">
           </canvas>
          </div>
          <script src="./js/index.js" charset="UTF-8"></script>
          </body>
          </html>
          // 獲取畫布元素
          let canvas = document.getElementById("square");
          // 獲取繪制2D元素上下文
          let context = canvas.getContext("2d");
          // 設(shè)置填充顏色為紅色
          context.fillStyle = "#f00";
          // 填充一個(gè)正方形
          context.fillRect(10,0,10,10);
          

          繪制線段,填充多邊形

          // 獲取畫布元素

          let canvas = document.getElementById("square");

          // 獲取繪制2D元素上下文

          let context = canvas.getContext("2d");

          // 開始一條路徑

          context.beginPath();

          // 從100,100 開始定義一條新的子路徑

          context.moveTo(100,100);

          // 從100 100 到 200 200 繪制一條線段

          context.lineTo(200,200);

          // 從200 200 到 100 200 繪制一條線段

          context.lineTo(100,200);

          // 從100 200 到 100 100 繪制一條路徑

          context.lineTo(100,100);

          // 繪制邊

          context.stroke();

          // 進(jìn)行填充

          context.fill();

          繪制多邊形

          以五邊形為例子,

          var canvas = document.getElementById("square");
          var context = canvas.getContext("2d");
          // 繪制一個(gè)以100,100為中心,半徑為20的柜子N變形,每個(gè)定點(diǎn)均勻分布在圓角上,第一個(gè)定點(diǎn)放置在最上下
          // 偏轉(zhuǎn)角度為0
          // 開始定義一條子路徑
          context.moveTo(100 + 20 * Math.sin(0), 100 - 20 * Math.cos(0));
          // 計(jì)算兩個(gè)頂點(diǎn)之間夾角
          // 其中2π為一個(gè)園,除以邊數(shù),得到需要旋轉(zhuǎn)的角度
          var delta = 2 * Math.PI/5;
          console.log(delta);
          // 循環(huán)剩余每個(gè)頂點(diǎn)
          var angle = 0;
          for(var i = 1; i < 5; i++){
           // 角度累加
           angle += delta;
           // 通過旋轉(zhuǎn)繪制下一個(gè)頂點(diǎn),不斷的旋轉(zhuǎn)繪制
           context.lineTo(100 + 20 * Math.sin(angle), 100 - 20*Math.cos(angle));
          }
          // 最后一個(gè)頂點(diǎn)和起點(diǎn)進(jìn)行連接
          context.closePath();
          // 從新開始一條新路徑
          context.stroke();
          context.fill();
          

          同理,畫圓

          var canvas = document.getElementById("square");
          var context = canvas.getContext("2d");
          // 繪制一個(gè)以100,100為中心,半徑為20的柜子N變形,每個(gè)定點(diǎn)均勻分布在圓角上,第一個(gè)定點(diǎn)放置在最上下
          // 偏轉(zhuǎn)角度為0
          // 開始定義一條子路徑
          context.moveTo(100 + 20 * Math.sin(0), 100 - 20 * Math.cos(0));
          // 計(jì)算兩個(gè)頂點(diǎn)之間夾角
          // 其中2π為一個(gè)園,除以邊數(shù),得到需要旋轉(zhuǎn)的角度
          var delta = 2 * Math.PI/500000;
          console.log(delta);
          // 循環(huán)剩余每個(gè)頂點(diǎn)
          var angle = 0;
          for(var i = 1; i < 500000; i++){
           // 角度累加
           angle += delta;
           // 通過旋轉(zhuǎn)繪制下一個(gè)頂點(diǎn),不斷的旋轉(zhuǎn)繪制
           context.lineTo(100 + 20 * Math.sin(angle), 100 - 20*Math.cos(angle));
          }
          // 最后一個(gè)頂點(diǎn)和起點(diǎn)進(jìn)行連接
          context.closePath();
          // 從新開始一條新路徑
          context.stroke();
          context.fill();
          

          非零繞數(shù)原則

          要檢測(cè)一個(gè)點(diǎn)p是否在路徑內(nèi)部,使用非零繞數(shù)原則,即,一條從點(diǎn)p出發(fā)沿著任意方向無限延伸,或者一直延伸到路徑所在的區(qū)域外某點(diǎn)的射線,現(xiàn)在從0開始初始化一個(gè)計(jì)數(shù)器,對(duì)穿過這條射線的路徑進(jìn)行枚舉,每當(dāng)一條路徑順時(shí)針方向穿過射線的時(shí)候,計(jì)數(shù)器加1,逆時(shí)針減1,最后,枚舉完所有路徑以后,如果計(jì)時(shí)器的值不是0,那么就認(rèn)為p在路徑內(nèi),反過來,計(jì)數(shù)器的值為0,p在路徑外。

          js根據(jù)非零繞數(shù)原則確定那個(gè)在路徑內(nèi),那個(gè)在路徑外,用于進(jìn)行填充。

          圖形屬性

          可以通過設(shè)置畫布上下文的fillStyle等屬性,設(shè)置圖形的屬性,例如對(duì)畫布上下文的fillStyle的屬性進(jìn)行設(shè)置,即,可以設(shè)置出填充時(shí)的顏色,漸變,圖案等樣式。

          對(duì)于canvas來說,每次獲取上下文對(duì)象的時(shí)候,都會(huì)返回同一個(gè)上下文對(duì)象,即,上下文對(duì)象為單例的。

          還可以使用save方法,把當(dāng)前的狀態(tài),壓入已經(jīng)保存的棧中,調(diào)用restore方法,把狀態(tài)進(jìn)行恢復(fù),即彈棧。

          畫布尺寸坐標(biāo)

          畫布的默認(rèn)的坐標(biāo)系為左上角的坐標(biāo)原點(diǎn)(0,0),右邊數(shù)值大,下數(shù)值大,使用浮點(diǎn)數(shù)指定坐標(biāo),但不會(huì)自動(dòng)轉(zhuǎn)換為整數(shù),會(huì)用反鋸齒的方式,模擬填充部分元素。

          畫布尺寸不能隨意改變,對(duì)任意屬性進(jìn)行操作,都會(huì)清空整個(gè)畫布。

          坐標(biāo)系變換

          每一個(gè)點(diǎn)的坐標(biāo)都會(huì)映射到css像素上,css像素會(huì)映射到一個(gè)或多個(gè)設(shè)備像素。

          畫布中的特定操作,屬性使用默認(rèn)坐標(biāo)系。

          畫布還有當(dāng)前變換矩陣。

          畫布還有當(dāng)前變換矩陣,當(dāng)前變換矩陣作為圖形狀態(tài)的一部分。矩陣定義了當(dāng)前畫布的坐標(biāo)系。

          畫布的操作會(huì)把該點(diǎn)映射到當(dāng)前的坐標(biāo)系中。

          坐標(biāo)變換

          當(dāng)調(diào)用c.translate(dx,dy)方法的時(shí)候,會(huì)進(jìn)行如下變換

          translate會(huì)進(jìn)行坐標(biāo)的上下移動(dòng)

          x' = x + dy;
          y' = y + dy;
          

          縮放

          如要進(jìn)行縮放,進(jìn)行的是如下的變換

          x' = sx * x;
          y' = sy * y;
          

          進(jìn)行旋轉(zhuǎn)操作,進(jìn)行的是如下變換

          x' = x * cos(a) - y * sin(a);
          y' = y * cos(a) - x * sin(a);
          

          如果要先變換再伸縮,進(jìn)行如下變換

          需要先把現(xiàn)有坐標(biāo)系映射成為坐標(biāo)系中的點(diǎn)x’, y’ 然后再變換到x‘’ , y‘’

          x'' = sx*x + dx;
          y'' = sy*y + dy;
          

          如果變換順序相反進(jìn)行如下變換

          x'' = sx*(x + dx);
          y'' = sy*(y + dy);
          

          這種變換稱為仿射變換,并且仿射變換會(huì)修改點(diǎn)的距離和線段間的夾角。對(duì)于平行線來說,仿射變換也會(huì)保持平行。仿射變換用6個(gè)參數(shù)描述成為如下表述

          x' = ax + cy + e;
          y' = bx + dy + f;
          

          通過傳入?yún)?shù)實(shí)現(xiàn)仿射變換

          對(duì)于坐標(biāo)變換來說,除非進(jìn)行刷新,否則,已經(jīng)繪制的圖形,不會(huì)進(jìn)行消失,所有的變換,都不能對(duì)已經(jīng)繪制的圖形進(jìn)行更改。栗子如下

          var canvas = document.getElementById("square");
          var context = canvas.getContext("2d");
          // 通過坐標(biāo)變換實(shí)現(xiàn)科赫雪花
          // 開始一條路徑
          context.beginPath();
          // 開始繪制子路徑
          context.moveTo(100,100);
          // 繼續(xù)繪制
          context.lineTo(200,200);
          // 繼續(xù)繪制
          context.lineTo(200,200);
          // 進(jìn)行繪制邊
          context.stroke();
          context.translate(200,200);
          // 開始一條路徑
          context.beginPath();
          // 開始繪制子路徑
          context.moveTo(100,100);
          // 繼續(xù)繪制
          context.lineTo(200,200);
          // 繼續(xù)繪制
          context.lineTo(200,200);
          // 進(jìn)行繪制邊
          context.stroke();
          

          已經(jīng)繪制的圖形不會(huì)進(jìn)行改變,改變的是已經(jīng)繪制的圖形

          科赫雪花

          var canvas = document.getElementById("square");

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

          // 通過坐標(biāo)變換實(shí)現(xiàn)科赫雪花

          // 當(dāng)前狀態(tài)入棧

          function leg(n) {

          // 保存狀態(tài)

          context.save();

          // 遞歸畫

          if(n == 0){

          context.lineTo(50, 0);

          }else{

          // 定義為v字型

          context.scale(1/2,1/2);

          // 遞歸第一條

          context.rotate(60 * (Math.PI / 180));

          leg(n - 1);

          context.rotate(-120 * (Math.PI / 180));

          leg(n - 1);

          }

          // 坐標(biāo)恢復(fù)變換

          context.restore();

          // 恢復(fù)下一個(gè)坐標(biāo)為0,0

          context.translate(50, 0);

          }

          context.save();

          context.moveTo(50, 50);

          // 繪制第一條

          leg(1);

          context.stroke();

          繪制填充曲線

          繪制一些常見的圖形

          var canvas = document.getElementById("square");
          var context = canvas.getContext("2d");
          // 工具函數(shù),角度轉(zhuǎn)弧度
          function rads(x) {
           return Math.PI * x / 180;
          }
          // 繪制園
          context.beginPath();
          context.arc(100,100,40, 0, rads(360), false);
          context.stroke();
          context.fill();
          

          同理繪制貝塞爾曲線也是同理。

          顏色,透明度,漸變,圖案

          繪制一個(gè)漸變

          需要使用createLinearGradient獲取一個(gè)進(jìn)行漸變的上下文,對(duì)這個(gè)上下文進(jìn)行處理。然后其顏色設(shè)置為這個(gè)漸變的上下文,即,fillStyle屬性。

          線段繪制

          封頂

          對(duì)于線段,有三種封頂方式,即,butt,square,round

          在繪制圖形以后,會(huì)參數(shù)尖角,圓角,平角,三種。

          lineCap屬性

          文本

          和css類似,基線問題。

          裁剪

          直接調(diào)動(dòng)clip即可,當(dāng)前路徑也會(huì)被裁剪進(jìn)入,路徑外的統(tǒng)統(tǒng)不會(huì)顯示。

          陰影

          設(shè)置shadow屬性即可

          圖片

          畫布API支持位圖圖片,同時(shí)也支持canvas導(dǎo)出成為圖片。

          // 創(chuàng)建一個(gè)img元素
          let img = document.createElement("img");
          // 設(shè)置src屬性
          img.src = canvas.toDataURL();
          // 追加到文檔后面
          document.body.appendChild(img);
          

          合成

          一些api不在闡述

          像素操作

          調(diào)用getImageDate方法返回ImageDate對(duì)象

          使用createImageDate()可以創(chuàng)建像素容器

          進(jìn)行動(dòng)態(tài)模糊先獲取像素的ImageDate對(duì)象,然后再獲取該對(duì)象的data屬性,該data為一個(gè)數(shù)組。為一個(gè)維數(shù)組。每四個(gè)元素代表紅色分量,綠色分量,藍(lán)色分量,透明度分量。(Alpha分量)

          其色素直為0-1,即,數(shù)組元素中保存的數(shù)組為色素值。

          每四個(gè)每四個(gè)元素遍歷。然后把其色素值的1/ n + 上一個(gè)色塊的m/n 然后賦值給新的色塊,代碼如下

          // row為行數(shù)
          for(var row = 0; row < height; row++){
           // 獲得每行第二個(gè)元素的偏移量,其中width為行的色素塊。
           var i = row * width * 4;
           // 每4個(gè)的色素值進(jìn)行處理
           for(var col = 1; col < width; col++, i+=4){
           // 對(duì)紅色分量處理
           data[i] = (data[i] + data[i - 4] * m) / n;
           // 對(duì)綠色分量處理
           data[i + 1] = (data[i + 1] + data[i + 1 - 4] * m) / n;
           // 對(duì)藍(lán)色分量處理
           data[i + 2] = (data[i + 2] + data[i + 2 - 4] * m) / n;
           // 對(duì)透明度分量處理
           data[i + 3] = (data[i + 3] + data[i + 3 - 4] * m) / n;
           }
          }
          

          然后把其色素塊進(jìn)行復(fù)制回去即可。

          其中每個(gè)像素占據(jù)一個(gè)字節(jié),一個(gè)四個(gè)字節(jié)。

          命中檢測(cè)

          isPointInPath方法用來確定一個(gè)點(diǎn)是否落在當(dāng)前路徑中。

          即命中檢測(cè)。

          命中檢測(cè)可以和鼠標(biāo)事件相互轉(zhuǎn)化

          但是坐標(biāo)需要進(jìn)行轉(zhuǎn)換。

          lt;canvas> 標(biāo)簽定義圖形,比如圖表和其他圖像,你必須使用腳本來繪制圖形。

          比如在畫布上(Canvas)畫一個(gè)紅色矩形,漸變矩形,彩色矩形,和一些彩色的文字。

          什么是 canvas?

          HTML5 <canvas> 元素用于圖形的繪制,通過腳本 (通常是JavaScript)來完成.

          <canvas> 標(biāo)簽只是圖形容器,您必須使用腳本來繪制圖形。

          你可以通過多種方法使用 canvas 繪制路徑,盒、圓、字符以及添加圖像。

          iphone

          創(chuàng)建一個(gè)畫布(Canvas)

          一個(gè)畫布在網(wǎng)頁中是一個(gè)矩形框,通過 <canvas> 元素來繪制。

          注意: 默認(rèn)情況下 <canvas> 元素沒有邊框和內(nèi)容。

          <canvas>簡單實(shí)例如下:

          <canvas id="myCanvas" width="200" height="100"></canvas>

          注意: 標(biāo)簽通常需要指定一個(gè)id屬性 (腳本中經(jīng)常引用), width 和 height 屬性定義的畫布的大小。

          提示:你可以在HTML頁面中使用多個(gè) <canvas> 元素.

          1.使用 style 屬性來添加邊框:

          <canvas id="myCanvas" width="200" height="100"

          style="border:1px solid #000000;">

          </canvas>

          2.使用 JavaScript 來繪制圖像

          canvas 元素本身是沒有繪圖能力的。所有的繪制工作必須在 JavaScript 內(nèi)部完成:

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

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

          ctx.fillStyle="#FF0000";

          ctx.fillRect(0,0,150,75);

          實(shí)例解析:

          3.首先,找到 <canvas> 元素:

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

          4.然后,創(chuàng)建 context 對(duì)象:

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

          getContext("2d") 對(duì)象是內(nèi)建的 HTML5 對(duì)象,擁有多種繪制路徑、矩形、圓形、字符以及添加圖像的方法。

          下面的兩行代碼繪制一個(gè)紅色的矩形:

          ctx.fillStyle="#FF0000";

          ctx.fillRect(0,0,150,75);

          設(shè)置fillStyle屬性可以是CSS顏色,漸變,或圖案。fillStyle 默認(rèn)設(shè)置是#000000(黑色)。

          fillRect(x,y,width,height) 方法定義了矩形當(dāng)前的填充方式。

          iphone

          Canvas 坐標(biāo)

          canvas 是一個(gè)二維網(wǎng)格。

          canvas 的左上角坐標(biāo)為 (0,0)

          上面的 fillRect 方法擁有參數(shù) (0,0,150,75)。

          意思是:在畫布上繪制 150x75 的矩形,從左上角開始 (0,0)。

          坐標(biāo)實(shí)例

          如下圖所示,畫布的 X 和 Y 坐標(biāo)用于在畫布上對(duì)繪畫進(jìn)行定位。鼠標(biāo)移動(dòng)的矩形框上,顯示定位坐標(biāo)。

          Canvas - 路徑

          在Canvas上畫線,我們將使用以下兩種方法:

          moveTo(x,y) 定義線條開始坐標(biāo)

          lineTo(x,y) 定義線條結(jié)束坐標(biāo)

          繪制線條我們必須使用到 "ink" 的方法,就像stroke().

          定義開始坐標(biāo)(0,0), 和結(jié)束坐標(biāo) (200,100)。然后使用 stroke() 方法來繪制線條:

          Canvas - 文本

          使用 canvas 繪制文本,重要的屬性和方法如下:

          font - 定義字體

          fillText(text,x,y) - 在 canvas 上繪制實(shí)心的文本

          strokeText(text,x,y) - 在 canvas 上繪制空心的文本

          使用 fillText():

          使用 "Arial" 字體在畫布上繪制一個(gè)高 30px 的文字(實(shí)心):

          JavaScript:

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

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

          ctx.font="30px Arial";

          ctx.fillText("Hello World",10,50);

          大家有沒有學(xué)會(huì)呢?沒學(xué)會(huì)的話記得私信小編"011"哦~

          記得在過去的Web前端開發(fā)中,如果你需要繪圖或者生成相關(guān)圖形的話,使用Flash可能是你唯一或者說最強(qiáng)大的實(shí)現(xiàn)方式,而在近些年的技術(shù)熱點(diǎn)HTML5標(biāo)準(zhǔn)中,(畫布)能夠更加方便的幫助你實(shí)現(xiàn)2D繪制圖形圖像及其各種動(dòng)畫效果功能。

          首先我們先來了解一下什么是HTML Canvas?

          我們可以在HTML中使用屬性width和height來定義Canvas。但是實(shí)現(xiàn)Canvas的相關(guān)功能主要還依賴于Javascript實(shí)現(xiàn),即HTML5 Canvas API。我們使用javascript來訪問和控制Canvas相關(guān)的區(qū)域,比如調(diào)用相關(guān)繪圖的方法,用來動(dòng)態(tài)的生成需要的動(dòng)畫或者圖形。

          接下來我們來看看canvas的特性:

          互動(dòng)性:Canvas支持互動(dòng),可以很好的響應(yīng)用戶的操作,我們可以通過Javascript來監(jiān)鍵盤,鼠標(biāo),及其觸摸設(shè)備相關(guān)事件。

          動(dòng) 畫:任何被canvas繪制的圖形都可以添加動(dòng)畫,簡單的彈跳球或者復(fù)雜的HTML5游戲都可以實(shí)現(xiàn)

          靈活性:開發(fā)人員可以使用Canvas來繪制任何的內(nèi)容,比如,直線,圖形,文字,圖片等,可以包含動(dòng)畫或者不包含。同時(shí)你可以添加音頻或者視頻瀏覽器支持:幾乎所有的現(xiàn)代瀏覽器都支持,并且被廣泛的各種設(shè)備支持,例如,桌面,平板,智能手機(jī)等等。

          流行度:canvas目前很流行,很多的開發(fā)人員都使用它來開發(fā)類似游戲或者繪圖類應(yīng)用

          web標(biāo)準(zhǔn):只需要有瀏覽器就可以運(yùn)行,而非flash或者silverlight,需要安裝相關(guān)的插件

          開發(fā)一次,任何瀏覽器都可以運(yùn)行(當(dāng)然,不包括老式瀏覽器)

          可以使用免費(fèi)擁有大量的開發(fā)工具及其類庫。

          使用HTML5 Canvas我們能開發(fā)那些相關(guān)產(chǎn)品或者應(yīng)用呢?

          1 可視化數(shù)據(jù): 各類統(tǒng)計(jì)圖表,比如:百度的echart

          2 場(chǎng)景秀:用Canvas實(shí)現(xiàn)動(dòng)態(tài)的廣告效果能夠非常融洽的跨平臺(tái)運(yùn)行。如:手機(jī)中微產(chǎn)品.在移動(dòng)端兼容性很好。

          3 游戲:canvas在基于Web的圖像顯示方面比Flash更加立體、更加精巧,canvas成為HTML5小游戲開發(fā)首選。現(xiàn)階段h5做游戲,營業(yè)方式不是很明確. 25 超棒的 HTML5 Canvas 游戲。

          4 其他可嵌入網(wǎng)站的內(nèi)容 (多用于活動(dòng)頁面、特效):類似圖表、音頻、視頻,還有許多元素能夠更好地與Web融合,并且不需要任何插件。

          5 趨勢(shì)=> 模擬器: 無論從視覺效果還是核心功能方面來說,模擬器產(chǎn)品可以完全由JavaScript來實(shí)現(xiàn)。模擬真實(shí)硬件環(huán)境,如移動(dòng)端各種類型手機(jī).

          6 趨勢(shì)=> 遠(yuǎn)程計(jì)算機(jī)控制: Canvas可以讓開發(fā)者更好地實(shí)現(xiàn)基于Web的數(shù)據(jù)傳輸,構(gòu)建一個(gè)完美的可視化控制界面。

          7 趨勢(shì)=> 圖形編輯器: Photoshop圖形編輯器將能夠100%基于Web實(shí)現(xiàn)。

          如何使用HTML5 Canvas?

          使用HTML5 canvas其實(shí)非常簡單, 每一個(gè)canvas都擁有一個(gè)上下文(context)。使用它你可以來調(diào)用相關(guān)的畫布方法。

          <canvas id="mycanvas" width="500" height ="400">

          <p>您的瀏覽器不支持HTML5 Canvas</p>

          </canvas>

          以上代碼我們?cè)贖TML中添加了一個(gè)canvas標(biāo)簽,如果瀏覽器不支持canvas,會(huì)顯示<p>標(biāo)簽的內(nèi)容,當(dāng)然,如果你需要支持老式瀏覽器你也可以使用flash或者其它方法來做一個(gè)替代的解決方案。

          var canvas = document.getElementById('mycanvas'),

          context = canvas.getContext('2d');

          以上代碼我們通過canvas取到2D的context。

          在HTML5 Canvas的2D結(jié)構(gòu)中,坐標(biāo)(0,0)在左上方,這和傳統(tǒng)的坐標(biāo)不太一樣。大家需要注意一下,如下圖所示:

          下面來說一下canvas的API:

          canvas的主要屬性和方法:

          save():保存當(dāng)前環(huán)境的狀態(tài)

          restore():返回之前保存過的路徑狀態(tài)和屬性

          createEvent()

          getContext():返回一個(gè)對(duì)象,指出訪問繪圖功能必要的API

          toDateURL():返回canvas圖像的URL

          顏色、樣式和陰影屬性和方法:

          fillStyle:設(shè)置或返回用于填充繪畫的顏色、漸變或模式

          strokeStyle:設(shè)置或返回用于筆觸的顏色、漸變或模式

          shadowColor:設(shè)置或返回用于陰影的顏色

          shadowBlur:設(shè)置或返回用于陰影的模糊級(jí)別

          shadowOffsetX:設(shè)置或返回陰影距形狀的水平距離

          shadowOffsetY:設(shè)置或返回陰影距形狀的垂直距離

          createLinearGradient():創(chuàng)建線性漸變(用在畫布內(nèi)容上)

          createPattern():在指定的方向上重復(fù)指定的元素

          createRadialGradient():創(chuàng)建放射狀/環(huán)形的漸變(用在畫布內(nèi)容上)

          addColorStop():規(guī)定漸變對(duì)象中的顏色和停止位置

          線條樣式屬性和方法

          lineCap:設(shè)置或返回線條的結(jié)束端點(diǎn)樣式

          lineJoin:設(shè)置或返回兩條線相交時(shí),所創(chuàng)建的拐角類型

          lineWidth:設(shè)置或返回當(dāng)前的線段寬度

          miterLimit:設(shè)置或返回最大斜接長度

          Canvas的API-路徑方法

          fill():填充當(dāng)前繪圖(路徑)

          stroke():繪制已定義的路徑

          beginPath():起始一條路徑,或重置當(dāng)前路徑

          moveTo():把路徑移動(dòng)到畫布中的指定點(diǎn),不創(chuàng)建線條

          closePath():創(chuàng)建從當(dāng)前點(diǎn)回到起始點(diǎn)的路徑

          lineTo():添加一個(gè)新點(diǎn),創(chuàng)建從該點(diǎn)到最后指定點(diǎn)的線條

          clip():從原始畫布剪切任意形狀和尺寸的區(qū)域

          quadraticCurveTo():創(chuàng)建二次貝塞爾曲線

          bezierCurveTo():創(chuàng)建三次貝塞爾曲線

          arc():創(chuàng)建弧/曲線(用于創(chuàng)建圓形或部分圓)

          arcTo():創(chuàng)建兩切線之間的弧/曲線

          isPointInPath():如果指定的點(diǎn)位于當(dāng)前路徑中,返回布爾值

          Canvas的API-轉(zhuǎn)換方法

          scale():縮放當(dāng)前繪圖至更大或更小

          rotate():旋轉(zhuǎn)當(dāng)前繪圖

          translate():重新映射畫布上的(0,0)位置

          transform():替換繪圖的當(dāng)前轉(zhuǎn)換矩陣

          setTransform():將當(dāng)前轉(zhuǎn)換重置為單位矩陣,然后運(yùn)行transform()

          Canvas的API-文本屬性和方法

          font:設(shè)置或返回文本內(nèi)容的當(dāng)前字體屬性

          textAlign:設(shè)置或返回文本內(nèi)容的當(dāng)前對(duì)齊方式

          textBaseline:設(shè)置或返回在繪制文本時(shí)使用的的當(dāng)前文本基線

          fillText():在畫布上繪制"被填充的"文本

          strokeText():在畫布上繪制文本(無填充)

          measureText():返回包含指定文本寬度的對(duì)象

          Canvas的API-圖像繪制方法

          drawImage():向畫布上繪制圖像、畫布或視頻

          Canvas的API-像素操作方法和屬性

          width:返回ImageData對(duì)象的寬度

          height:返回ImageData對(duì)象的高度

          data:返回一個(gè)對(duì)象,其包含指定的ImageData對(duì)象的圖像數(shù)據(jù)

          createImageData():創(chuàng)建新的、空白的I馬哥Data對(duì)象

          getImageData():返回ImageData對(duì)象,該對(duì)象為畫布上指定的矩形復(fù)制像素?cái)?shù)據(jù)

          putImageData():把圖像數(shù)據(jù)(從指定的ImageData對(duì)象)放回畫布上

          Canvas的API-圖像合成屬性

          globalAlpha:設(shè)置或返回繪圖的當(dāng)前alpha或透明值

          globalCompositeOperation:設(shè)置或返回新圖像如何繪制到已有的圖像上

          快速高效的創(chuàng)建HTML5畫布圖形?

          直接使用Canvas來繪制圖形相對(duì)來說比較乏味并且麻煩,所以在現(xiàn)代的HTML5 Canvas中我們使用一些現(xiàn)成的第三方類庫幫助我們多快好省的實(shí)現(xiàn)圖形繪制的功能:Echart.js


          主站蜘蛛池模板: 后入内射国产一区二区| 一区二区和激情视频| 精品人伦一区二区三区潘金莲| 亚洲日韩中文字幕无码一区| 亚洲国产精品无码第一区二区三区| 亚洲国产欧美日韩精品一区二区三区| 日本精品无码一区二区三区久久久 | 91视频一区二区| 中文字幕一区二区三区久久网站 | 国产精品视频免费一区二区| 亚洲男人的天堂一区二区| 精品国产一区AV天美传媒| 中日韩一区二区三区| 日美欧韩一区二去三区| 亚洲AV无码一区二区三区电影 | 国产激情一区二区三区四区 | 国内精品视频一区二区三区| 人妻av综合天堂一区| 亚洲综合国产一区二区三区| 亚洲av高清在线观看一区二区| 国产激情一区二区三区| 正在播放国产一区| 久久精品一区二区三区中文字幕| 日韩高清一区二区三区不卡 | 无码成人一区二区| 亚洲一区二区女搞男| 国产成人AV一区二区三区无码 | 国产一区视频在线免费观看| 国产一区二区三区播放心情潘金莲 | 久久精品一区二区三区AV| 日韩精品无码一区二区三区不卡| 一本AV高清一区二区三区| 亚洲综合无码AV一区二区| 另类免费视频一区二区在线观看| 欧洲精品无码一区二区三区在线播放| 成人午夜视频精品一区| 亚洲AV无码一区二区乱子伦| 久久er99热精品一区二区| 人妻夜夜爽天天爽爽一区| 无码人妻精品一区二区蜜桃网站 | 亚洲爆乳无码一区二区三区|