日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

canvas js 绘图插件_Canvas专题—绘制柱状图(2)

發(fā)布時(shí)間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 canvas js 绘图插件_Canvas专题—绘制柱状图(2) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目標(biāo):在我們了解過(guò)前兩章節(jié)的知識(shí)點(diǎn)以后,為了把知識(shí)點(diǎn)進(jìn)行連結(jié),拓展,現(xiàn)在我們做一個(gè)圖表吧。

看一個(gè)echartst圖表

當(dāng)今Canvas庫(kù)有很多供我們選擇,比如,echarts在很大程度上能夠提高我們的工作效率,但是也存在著一些問(wèn)題:

  • 從業(yè)務(wù)覆蓋度出發(fā),echarts庫(kù)能提供很多模板,但是我們只需要其中的一種或者幾種就夠了,顯然造成了資源的浪費(fèi);
  • 如果業(yè)務(wù)需求變更,改進(jìn),那么依靠圖表庫(kù),肯定是不能滿足業(yè)務(wù)的,失去了靈活性。

這就是我們用Canvas打造自己圖表的原因。

分析圖表

讓我們先看一下目標(biāo)圖表的外觀

如圖所示,此圖表由坐標(biāo)軸X,Y,描述數(shù)字,文字,填充矩形,輔助線構(gòu)成。另外我們按比例計(jì)算坐標(biāo),增強(qiáng)復(fù)用性。

準(zhǔn)備工作

讓我們先在一個(gè)文件夾內(nèi)建立2個(gè)文件夾,一個(gè)chart.html文件.:css文件夾,存放樣式;js文件夾,存放js代碼;html文件是程序入口文件,然后在chart.html文件中引入css,js文件夾中的對(duì)應(yīng)文件。

我們?cè)赾hart.html中寫一個(gè)div標(biāo)簽來(lái)作為存放Canvas的容器。

<!DOCTYPE html>

js文件準(zhǔn)備

'use strict'

從chart.js文件開(kāi)始

現(xiàn)在讓我們用面向?qū)ο蟮姆绞綄⑺肅anvas畫出來(lái)。用面向?qū)ο蟮暮锰幘褪琼?yè)面有多個(gè)圖表的時(shí)候我們調(diào)用函數(shù),傳入所需的參數(shù),放到容器通常div中即可。

模擬來(lái)自后臺(tái)的數(shù)據(jù)

var

這里我們?cè)赾hart.js文件中寫入了data數(shù)組,是模擬后臺(tái)傳給我們的數(shù)據(jù),畫圖基于此。其中用到了getRandomInt函數(shù):

/*

接著我們?cè)俣x一下所需要的變量

var

定義所必需的變量

現(xiàn)在我們有了全局變量data,targetId,cw,ch。這些是我們準(zhǔn)備畫Canvas的必要參數(shù)。

圖表功能函數(shù)

我們現(xiàn)在準(zhǔn)備一個(gè)Bcharts構(gòu)造函數(shù):

function

this在函數(shù)內(nèi),指向調(diào)用函數(shù)的對(duì)象。configureChart,配置圖表函數(shù),init初始化函數(shù)包含了:

  • createCanvas函數(shù)創(chuàng)建Canvas元素,并插入到div中,通過(guò)getContext('2d')得到繪圖上下文;
  • handleData函數(shù)獲取來(lái)自后臺(tái)的數(shù)據(jù)x,y軸上的數(shù)據(jù);
  • prepareData函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理,按比例計(jì)算,分配x,y軸坐標(biāo)的位置。;
  • draw函數(shù)繪制圖表所有元素;

創(chuàng)建Canvas元素

通過(guò)createCanvas函數(shù)創(chuàng)建Canvas。

Bcharts

設(shè)置Canvas參數(shù)

通過(guò)setCanvasParameters對(duì)Canvas必需的參數(shù)賦值到chart屬性。

Bcharts

設(shè)置圖表比例

通過(guò)setChartParameters函數(shù)配置:x,y,文字,展示的比例。比例10,6可以根據(jù)ui需要自行更改。

Bcharts

配置圖表

通過(guò)configureChart函數(shù)整合畫布,圖表比例的配置。

Bcharts

初始化

定義init函數(shù)到Bcharts原型上,內(nèi)部調(diào)用如下方法:

Bcharts

提取模擬數(shù)據(jù)

其實(shí)我們?cè)谀玫胶笈_(tái)的數(shù)據(jù)后,需要提取我們所需要的數(shù)據(jù),比如label,value,具體還要根據(jù)后端提供的數(shù)據(jù)進(jìn)行提取,整理

Bcharts

整理數(shù)據(jù)

用prepareData函數(shù)整理我們的數(shù)據(jù),需要了解

Math.max.apply(null,[arg1,arg2,arg3]);

兩個(gè)參數(shù):

  • null參數(shù)不改變this指向;
  • [arg1,arg2,arg3]應(yīng)用Math.max方法的對(duì)象,在prepareData函數(shù)內(nèi)我們chart.values為數(shù)組,故求出最大值
Bcharts

畫函數(shù)

在這里讓我們將draw函數(shù)進(jìn)行細(xì)化,正如我們?cè)陂_(kāi)頭分析圖表中分析圖表構(gòu)成的元素。

細(xì)化后的函數(shù)職責(zé)單一,方便調(diào)試,更改,更加清晰。如下所示:

Bcharts

1.畫x軸

通過(guò)drawX函數(shù)畫x軸:

Bcharts

其中坐標(biāo)依賴我們setChartParameters函數(shù)設(shè)置的比例,也就是說(shuō)圖表坐標(biāo)0就是moveTo(60,405),畫筆開(kāi)始的點(diǎn)

lineTo(540,405),x軸上,y軸值肯定是不變的,所以畫布寬度-比例的留白就是圖表x軸的終點(diǎn)。接下來(lái)我們給定線寬,stroke(),就好了。

2.畫y軸

通過(guò)drawY函數(shù)畫y軸:

Bcharts

3.畫x軸描述文字

通過(guò)drawXLabel函數(shù)畫出x軸描述文字(一,二,三月...):

Bcharts

4.畫y軸數(shù)值

通過(guò)drawYLabel函數(shù)畫y軸,如上同理:

Bcharts

5.畫水平輔助線

通過(guò)HorGuideLines函數(shù)畫x軸輔助線:

Bcharts

6.畫垂直輔助線

通過(guò)verGuideLines畫垂直輔助線同理:

Bcharts

7.準(zhǔn)備填充矩形隨機(jī)填充色

Bcharts

8.畫矩形

通過(guò)drawBars繪制矩形

Bcharts

9.調(diào)用Bcharts

var

new在此時(shí)做了兩件事情:

  • 創(chuàng)建了一個(gè)新的Bcharts對(duì)象;
  • 返回了一個(gè)新的Bcharts對(duì)象。

我們將返回的新的Bcharts通過(guò)var引用到chart。

打印chart我們將得到:

所以chart共享Bcharts所有屬性,方法。

思考行動(dòng)

我們從分析圖表的構(gòu)成:

  • x軸;
  • y軸;
  • 輔助線;
  • 矩形。

然后還有看不見(jiàn)的數(shù)據(jù)處理與準(zhǔn)備,最重要的我們根據(jù)比例多次依賴setChartParameters函數(shù),一步一步將圖表完成。

比較難些的有兩個(gè)地方:

  • 整理數(shù)據(jù);
  • setChartParameters函數(shù)對(duì)于圖表比例的設(shè)計(jì)。

希望大家能夠?qū)etChartParameters函數(shù)進(jìn)行比例的改變,通過(guò)自己繪畫,加強(qiáng)自己對(duì)繪制柱狀圖業(yè)務(wù)模型的了解。

在下一章節(jié)中我們開(kāi)始繪制動(dòng)態(tài)屏保,不例外也用到本章與之前的知識(shí)點(diǎn)。

總結(jié)

以上是生活随笔為你收集整理的canvas js 绘图插件_Canvas专题—绘制柱状图(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。