整合營銷服務(wù)商

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

          免費咨詢熱線:

          Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖

          Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖

          網(wǎng)上統(tǒng)計圖插件非常多,比如Echarts、Chart.js等,但是如果你要的是功能簡單,單一的統(tǒng)計圖,應(yīng)用這些就會很浪費,也增加自身體積,如果你想要簡單的扇形統(tǒng)計圖,請看過來!

          Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖

          HTML

          Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖

          JavaScript

          Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖

          Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖

          調(diào)用方法

          // 示例一
          drawCircle({
           id: 'one',//dom元素
           color: '#10af7e',//顏色
           bgLine: '#e4e4e4',//背景顏色
           angle: 0.5,//所占比例
           lineWidth: 15,//寬度(像素)
           lineCap: 'round'//描邊的樣式
          });
          // 示例二
          drawCircle({
           id: 'two',
           angle: 0.75,
           color: '#49b1f5',
           bgLine: '#f3766f',
           lineWidth: 20
          });
          // 示例三
          drawCircle({
           id: 'three',
           angle: 1,
           lineWidth: 25,
           color: 'grd'
          });
          
          

          CSS

          這里的css主要是用來[示例頁面](http://demo.javanx.cn/canvas-charts/)布局的,可以直接忽略

          .box ul, .box li {
           list-style: none;
           margin: 0;
           padding: 0;
          }
          .box ul li {
           float: left;
           width: 33%;
           text-align: center;
          }
          

          公告

          需要源碼和演示地址的同學(xué),點擊下方“了解更多”!

          更多資源敬請關(guān)注!

          么是 Canvas API?

          Canvas API(畫布)提供了一個通過 javascript 和 html 的 canvas 元素來在網(wǎng)頁上實時繪制圖形的方式??捎糜趧赢?、游戲、圖標(biāo)、圖片編輯等多個方面。

          使用前,首先需要新建在網(wǎng)頁上新建 canvas 元素。

          <canvas id="mycanvas" width="400" height="400">
           您的瀏覽器不支持canvas!
          </canvas>

          上述代碼,如果瀏覽器不支持 canvas,就會顯示標(biāo)簽中間的文字--您的瀏覽器不支持 canvas!標(biāo)簽通常指定一個 id 屬性,width、height 屬性一般定義畫布的大小。

          每個 canvas 元素都有一個對應(yīng)的 context 對象(上下文對象),Canvas API 定義在 context 對象上,使用 getContext 方法來獲取對象。

          var canvas=document.getElementById("mycanvas");
          var ctx=canvas.getContext("2d")

          getContext 方法指定參數(shù)2d,表示 canvas 用于生成平面圖案,如果是 3d,表示 canvas 用于生成3d立體圖像。

          繪圖方法

          canvas 畫布提供了一個畫圖的平面空間范圍,每個點都有自己的坐標(biāo),原點位于畫布的左上角,x表示橫坐標(biāo),y表示縱坐標(biāo)。

          2.1 繪制路徑

          • ctx.beginPath - 開始繪制路徑
          • ctx.moveTo( x,y ) - 設(shè)置路徑起點
          • ctx.lineTo( x,y ) - 繪制一條線到(x,y)點
          • ctx.closePath - 閉合圖形
          • ctx.stroke - 對路徑進行著色
          • ctx.fill - 對路徑進行填充

          eg:繪制一條線寬為5像素的紅色線條,代碼如下:

          var canvas=document.getElementById("mycanvas");
          var ctx=canvas.getContext("2d")
          ctx.beginPath();
          ctx.moveTo(0,0)
          ctx.lineTo(400,400)
          ctx.lineWidth=5
          ctx.strokeStyle="red"
          ctx.stroke()

          eg:繪制一個綠色三角形,代碼如下:

          var canvas=document.getElementById("mycanvas");
          var ctx=canvas.getContext("2d")
          ctx.beginPath();
          ctx.moveTo(0,0)
          ctx.lineTo(400,400)
          ctx.lineTo(0,400)
          ctx.closePath()
          ctx.lineWidth=5
          ctx.strokeStyle="red"
          ctx.stroke()
          ctx.fillStyle="green"
          ctx.fill()

          2.2 繪制矩形

          • ctx.rect(x,y,width,height) - 繪制矩形路徑
          • ctx.strokeRect(x,y,width,height) - 繪制矩形
          • ctx.fillRect(x,y,width,height) - 繪制填充矩形
          • ctx.clearRect(x,y,width,height) - 清除矩形區(qū)域

          上述繪制矩形的方法中均有四個參數(shù),其中x,y表示矩形的左上角頂點,也算起點,width、height 為矩形的寬高。strokeRect 與 strokeStyle 配合使用,fillRect 與 fillStyle 配合使用。

          eg:繪制一個帶有紅色邊框的矩形,代碼如下:

          var canvas=document.getElementById("mycanvas")
          var ctx=canvas.getContext('2d')
          ctx.strokeStyle="red";
          ctx.strokeRect(100,100,200,100)

          上述 stroke 替換成fill便可繪制一個紅色矩形。

          2.3 繪制圓形 / 弧

          • ctx.arc(x,y,radius,start,end,anticlockwise) - 繪制圓形或扇形

          上述的參數(shù)中,x,y 表示圓心的坐標(biāo),radius 是半徑,start 開始弧度,end 結(jié)束弧度,anticlockwise 表示是否是逆時針。

          eg:繪制一個帶有紅色描邊的黑色圓,代碼如下:

          <canvas id="circle" width="400" height="400"></canvas>
          <script>
           var canvas=document.getElementById("circle")
           var ctx=canvas.getContext('2d')
           ctx.arc(200,200,100,0,Math.PI*2,false);
           ctx.lineWidth=10
           ctx.strokeStyle="red"
           ctx.stroke()
           ctx.fillStyle="#000"
           ctx.fill()
          </script>

          2.4 繪制文本

          • strokeText(string,x,y) - 繪制空心文字
          • fillText(string,x,y) - 繪制實心文字

          上述兩個方法均帶有三個參數(shù),第一個 string 是需要繪制的內(nèi)容,x,y 是文字的位置,需要注意的是 y 坐標(biāo)是以文字的基線處開始算距離的,并非是文字頂部。文字的其他樣式可通過 font 屬性設(shè)置,與 css 的 font 類似。

          eg:繪制實心的文字,并設(shè)置文字加粗、大小20像素是微軟雅黑字體。代碼如下:

          var canvas=document.getElementById("mycanvas")
          var ctx=canvas.getContext('2d')
          ctx.fillStyle="red";
          ctx.font="bold 40px 微軟雅黑"
          ctx.fillText("我愛前端",100,100)

          注意:繪制文本的時候無法換行,如果需要換行的時候就需要多次繪制文字,達(dá)成換行目的。

          2.5 設(shè)置漸變色

          • createLinearGradient(x1,y1,x2,y2) - 設(shè)置漸變色

          其中 x1,y1 表示起點,x2,y2 表示終點,通過不同坐標(biāo)可控制漸變方向。

          eg:給文字設(shè)置漸變色,代碼如下:

          var canvas=document.getElementById("mycanvas")
          var ctx=canvas.getContext('2d')
          var grd=ctx.createLinearGradient(0,0,400,400)
          grd.addColorStop(0,"#4dffff")
          grd.addColorStop(1,"#8e12aa")
          ctx.fillStyle=grd;
          ctx.font="bold 40px 微軟雅黑"
          ctx.fillText("我愛前端",100,100)

          2.6 設(shè)置陰影

          • shadowOffsetX - 設(shè)置水平位移
          • shadowOffsetY - 設(shè)置垂直位移
          • shadowBlur - 設(shè)置模糊度
          • shadowColor - 陰影顏色

          eg:制作一個帶有陰影的矩形,代碼如下:

          var canvas=document.getElementById("mycanvas")
          var ctx=canvas.getContext("2d")
          ctx.shadowOffsetX=5;
          ctx.shadowOffsetY=5
          ctx.shadowBlur=10;
          ctx.shadowColor="rgba(0,0,0,0.5)"
          ctx.fillStyle="red"
          ctx.fillRect(0,0,200,100);

          圖片處理

          3.1 drawImage

          drawImage(img,x,y) - 對圖片進行重繪

          drawImage方法接受三個參數(shù),第一個是圖片文件的 DOM 元素,x,y 表示繪制圖片的起始位置,也是圖片的左上角。由于圖片加載需要時間,drawImage 方法只能在圖片加載完成后才能調(diào)用。

          eg:把一張圖片重繪到 canvas 上,代碼如下:

          var canvas=document.getElementById("mycanvas")
          var ctx=canvas.getContext("2d")
          var img=new Image()
          img.src="https://zhengxin-pub.cdn.bcebos.com/financepic/cc840df83f7b47551e080410cc6c484c_fullsize.jpg"
          img.onload=function(){
           ctx.clearRect(0,0,canvas.width,canvas.height)
           ctx.drawImage(img,0,0) 
          }

          3.2 getImageData、putImageData

          getImageData(0,0,canvas.width,canvas.height)

          getImageData 用來讀取 canvas 的內(nèi)容,返回一個對象,包含了每個像素的信息。

          var info=ctx.getImageData( 0 , 0 , canvas.width , canvas.height )

          putImageData( info , 0 , 0 )

          putImageData 是將 getImageData 獲取到的信息,重新繪制到 canvas。

          3.3 toDataURL

          對圖像數(shù)據(jù)做出修改后,使用 toDataURL 方法,將 canvas 數(shù)據(jù)重新轉(zhuǎn)化成一般的圖像文件格式,然后可以進行另存本地或轉(zhuǎn)發(fā)功能。

          eg:將 canvas 繪制的矩形轉(zhuǎn)成一張圖片,顯示到網(wǎng)頁上,代碼如下:

          <canvas id="mycanvas" width="400" height="400"></canvas>
          <img src="" alt="" id="picture">
          <script>
           var canvas=document.getElementById("mycanvas")
           var ctx=canvas.getContext('2d')
           ctx.strokeStyle="red";
           ctx.strokeRect(100,100,200,100)        
           var img=document.getElementById("picture")
           img.src=canvas.toDataURL("image/png")
          </script>

          3.4 save、restore

          • save - 保存上下文環(huán)境
          • restore - 恢復(fù)到上一次保存的上下文環(huán)境

          eg:下面代碼先用 save 方法,保存了當(dāng)前設(shè)置,然后繪制了一個有陰影的矩形。接著,使用 restore 方法,恢復(fù)了保存前的設(shè)置,繪制了一個沒有陰影的矩形。

          天小編將分享前端開發(fā)中必學(xué)的知識點,HTML5中關(guān)于Canvas(畫布)的知識點;

          基本內(nèi)容

          Canvas,是HTML5中所有新特性目前應(yīng)用最廣泛的一個標(biāo)簽,替代引入的圖片(圖形),用途非常廣泛如(因此這個標(biāo)簽相當(dāng)重要):

          1.完成HTML頁面中的圖形繪制

          2.實現(xiàn)網(wǎng)絡(luò)游戲或單機游戲(網(wǎng)頁游戲)

          3.在HTML頁面中繪制圖表

          4.餅狀圖

          5.柱狀圖

          6.折線圖

          7.網(wǎng)頁游戲

          ...

          Canvas的發(fā)展方向,目前主流的游戲開發(fā)引擎之一,如:白鷺引擎 - HTML5、Cocos-JS - HTML5、掌握物理系統(tǒng)、掌握精靈系統(tǒng)(地圖)、HTML5網(wǎng)頁游戲。

          需要特別注意的是:Canvas作為HTML頁面的元素出現(xiàn)、在Canvas繪制的圖形與HTML頁面是無關(guān)的、利用DOM定位繪制的圖形、元素的事件不能綁定繪制的圖形

          如何使用Canvas(分2步驟)

          HTML頁面部分:定義<canvas>元素、建議使用width和height屬性設(shè)置<canvas>元素的寬度和高度

          JavaScript部分:獲取HTML頁面中的<canvas>元素、通過getContext()方法創(chuàng)建畫布對象、該方法接收一個參數(shù) - 創(chuàng)建二維或三維圖形

          需要特別注意的是該參數(shù)為字符串類型、"2d"或"3d"中的"d"必須小寫、目前幾乎都是"2d"效果、使用Canvas提供的API完成需求。

          常見的應(yīng)用

          應(yīng)用一:繪制圖形

          fillRect(x,y,width,height) - 繪制實心矩形

          x和y - 表示繪制矩形的左上角的坐標(biāo)值(x,y)

          width - 表示繪制矩形的寬度

          height - 表示繪制矩形的高度

          strokeRect(x,y,width,height) - 繪制空心矩形

          x和y - 表示繪制矩形的左上角的坐標(biāo)值(x,y)

          width - 表示繪制矩形的寬度

          height - 表示繪制矩形的高度

          clearRect(x,y,width,height) - 清除指定區(qū)域的矩形

          x和y - 表示繪制矩形的左上角的坐標(biāo)值(x,y)

          width - 表示繪制矩形的寬度

          height - 表示繪制矩形的高度

          設(shè)置樣式

          fillStyle - 設(shè)置填充樣式

          strokeStyle - 設(shè)置描邊樣式

          globalAlpha - 設(shè)置透明度(0-10-100-10-1000-10-1000000-10-10000-10-10000-10-10000-10-10000-10-1000-10-100000-100-100-1)

          需要特別注意的是:先設(shè)置樣式,再繪制圖形,每改變一次樣式,都需要重新設(shè)置樣式,填充樣式與描邊樣式互不干擾

          應(yīng)用二:線性漸變

          createLinearGradient(x1,y1,x2,y2)

          線性漸變具有一個基準(zhǔn)線

          射線(扇形)漸變

          createRadialGradient(x1,y1,r1,x2,y2,r2)

          射線漸變具有兩個基準(zhǔn)圓

          設(shè)置漸變顏色

          addColorStop(position,color)方法

          color - 顏色

          實現(xiàn)步驟如下:

          1.設(shè)置線性漸變或扇形漸變

          2.返回漸變對象

          3.漸變對象設(shè)置漸變的顏色

          4.設(shè)置填充或描邊樣式為漸變

          應(yīng)用三:繪制文字

          設(shè)置屬性:font - 用法與CSS中的font一致

          對齊方式:

          textAlign - 水平對齊

          left - 基準(zhǔn)線在文字的左邊

          center - 基準(zhǔn)線在文字的中間

          right - 基準(zhǔn)線在文字的右邊

          textBaseline - 垂直對齊

          top - 基準(zhǔn)線在文字的上邊

          middle - 基準(zhǔn)線在文字的中間

          bottom - 基準(zhǔn)線在文字的下邊

          hanging - 懸掛基線

          alphabetic - 字母基線

          繪制方法

          fillText(text,x,y) - 繪制實心文字

          text - 設(shè)置繪制的文字內(nèi)容

          x和y - 設(shè)置繪制文字的坐標(biāo)值

          strokeText(text,x,y) - 繪制空心文字

          text - 設(shè)置繪制的文字內(nèi)容

          x和y - 設(shè)置繪制文字的坐標(biāo)值

          設(shè)置陰影

          shadowColor - 設(shè)置陰影顏色

          shadowOffsetX - 設(shè)置陰影水平位置

          正值 - 陰影向右移動、0 - 陰影不移動、負(fù)值 - 陰影向左移動

          shadowOffsetY - 設(shè)置陰影垂直位置

          正值 - 陰影向下移動、0 - 陰影不移動、負(fù)值 - 陰影向上移動

          shadowBlur - 設(shè)置陰影的程度

          值的類型為Number、值越大,陰影效果越明顯


          主站蜘蛛池模板: 激情啪啪精品一区二区| 成人在线一区二区| 内射白浆一区二区在线观看| 色窝窝无码一区二区三区| 国产精品美女一区二区| 91精品乱码一区二区三区| 亚洲午夜精品一区二区| 久久国产三级无码一区二区| 久久久无码精品人妻一区| 精品人妻AV一区二区三区| 九九久久99综合一区二区| 国产另类ts人妖一区二区三区 | 在线免费视频一区| 无码人妻品一区二区三区精99| 91一区二区三区| 久久99久久无码毛片一区二区| 国产一区二区三区亚洲综合| 日本一区二区三区在线看 | 一区二区三区四区无限乱码 | 亚洲国产成人久久一区二区三区| 亚洲线精品一区二区三区| 国产一区二区三区精品视频| 国产成人高清精品一区二区三区 | 福利国产微拍广场一区视频在线| 亚洲日本一区二区三区| 久久精品国产亚洲一区二区| 日本不卡免费新一区二区三区| 三上悠亚日韩精品一区在线| 亚洲无线码在线一区观看| 亚洲国产日韩一区高清在线 | 精品一区二区三区影院在线午夜| 国产萌白酱在线一区二区| 国产精品亚洲专一区二区三区| 美女AV一区二区三区| 精品一区二区三区高清免费观看| 日本大香伊一区二区三区| 久久国产一区二区三区| 亚洲大尺度无码无码专线一区| 日韩一区二区免费视频| 中文国产成人精品久久一区| 久久久一区二区三区|