溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts

發(fā)布時間:2020-04-06 19:07:23 來源:網(wǎng)絡 閱讀:1733 作者:wuhuacong 欄目:開發(fā)技術

在我們做各種應用的時候,我們可能都會使用到圖表統(tǒng)計,以前接觸過一些不同的圖表控件,在無意中發(fā)現(xiàn)了圖表控件Highcharts,其強大的功能和豐富的互動效果,令人難以忘懷。本篇主要介紹在Web開發(fā)中使用圖表控件Highcharts,以及對其進行統(tǒng)一漢化等操作,讓我們的程序功能更加豐富,內(nèi)容更加美觀。

1、Highcharts基礎介紹

Highcharts是一個非常流行,界面美觀的純Javascript圖表庫。它主要包括兩個部分:Highcharts和Highstock。Highcharts可以為您的網(wǎng)站或Web應用程序提供直觀,互動式的圖表。目前支持線,樣條,面積,areaspline,柱形圖,條形圖,餅圖和散點圖類型。Highstock可以為您方便地建立股票或一般的時間軸圖表。它包括先進的導航選項,預設的日期范圍,日期選擇器,滾動和平移等等。

HIghChartS官網(wǎng):http://www.highcharts.com/

HighCharts Demo:http://www.highcharts.com/demo/

Highcharts支持曲線圖、餅圖、柱狀圖、儀表圖、散點圖等等幾十種圖形,界面展示效果非常豐富,3D效果也很好看。列出幾個供參考下吧

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts  基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts 基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts

Highcharts使用jQuery等Javascript框架來處理基本的Javascript任務。因此,在使用Highcharts之前,需要在頁面頭部引用這些腳本文件。如果你使用jQuery作為基本框架,那么你需要在頁面頭部同時引用jQuery和Hightcharts兩個文件就可以了。

由于我在Web開發(fā)框架中,主要采用了MVC+EasyUI的方式,因包含的文件如下所示。

@*添加Jquery,EasyUI和easyUI的語言包的JS文件*@
<script type="text/javascript" src="~/Content/JqueryEasyUI/jquery.min.js"></script>
<script type="text/javascript" src="~/Content/JqueryEasyUI/jquery.easyui.min.js"></script>
<script type="text/javascript" src="~/Content/JqueryEasyUI/locale/easyui-lang-zh_CN.js"></script>


@*圖表JS文件應用*@
<script src="~/Content/JQueryTools/Highcharts/js/highcharts.js"></script>

但是為了更好的展示效果,我們一般添加一個圖標預定義的樣式進去,同時添加導出功能的腳本,如下所示。

@*圖表JS文件應用*@
<script src="~/Content/JQueryTools/Highcharts/js/highcharts.js"></script>
<script src="~/Content/JQueryTools/Highcharts/js/modules/exporting.js"></script>
<script src="~/Content/JQueryTools/Highcharts/js/themes/grid.js"></script>

當然,如果我們散點圖、3D圖形等內(nèi)容,還需要引入一些額外的js文件的

<script src="~/Content/JQueryTools/Highcharts/js/highcharts-more.js"></script>
<script src="~/Content/JQueryTools/Highcharts/js/highcharts-3d.js"></script>


2、圖表的生成操作

前面說了,這個圖表控件主要就是使用Jquery和Javascript來實現(xiàn),我們來分析下一個餅圖的Demo代碼。

$(function () {
    $('#container').highcharts({
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        title: {
            text: 'Browser market shares at a specific website, 2014'
        },
        tooltip: {
            pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                    style: {
                        color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
                    }
                }
            }
        },
        series: [{
            type: 'pie',
            name: 'Browser share',
            data: [
                ['Firefox',   45.0],
                ['IE',       26.8],
                {
                    name: 'Chrome',
                    y: 12.8,
                    sliced: true,
                    selected: true
                },
                ['Safari',    8.5],
                ['Opera',     6.2],
                ['Others',   0.7]
            ]
        }]
    });
});

上面的腳本主要就是根據(jù)series屬性里面的數(shù)據(jù)進行生成餅圖的,那么我們實際開發(fā)的時候,數(shù)據(jù)肯定不是固定的,一般我們是通過動態(tài)方式賦值的。

如我一般傾向于使用Jquery的Ajax方式,調(diào)用后臺獲得數(shù)據(jù),然后進行綁定的。那么這種情況下,如何操作腳本了呢,我們來分析看看。

首先我們先在腳本函數(shù)里面,初始化一個chart對象,并把其中涉series數(shù)據(jù)data設置為空就是了。

var chart1 = new Highcharts.Chart({
	chart: {
		renderTo: "container1",
		plotBackgroundColor: null,
		plotBorderWidth: null,
		plotShadow: false,
	},
	title: {
		text: '集團分子公司人員組成'
	},
	tooltip: {
		pointFormat: '{series.name}: <b>{point.y}</b>'
	},
	plotOptions: {
		pie: {
			allowPointSelect: true,
			cursor: 'pointer',
			dataLabels: {
				enabled: true,
				format: '<b>{point.name}</b>: {point.percentage:.1f} %',
				style: {
					color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
				}

			},
			//showInLegend: true
		}
	},
	series: [{
		type: 'pie',
		name: '人員數(shù)量',
		data: []
	}]
});

第二步是通過Ajax調(diào)用后臺連接獲得數(shù)據(jù),然后綁定到具體的屬性上就可以了,具體代碼如下所示。

//通過Ajax獲取圖表1數(shù)據(jù)
$.ajaxSettings.async = false;
var data1 = [];
$.getJSON("/User/GetCompanyUserCountJson", function (dict) {                
	for (var key in dict) {
		if (dict.hasOwnProperty(key)) {
			data1.push([key, dict[key]]);
		}
	};
	chart1.series[0].setData(data1);
});

而圖表的HTML代碼則是如下所示,主要就是新增一個div,id為container1,用來放置圖表就是了。

 <div class="box">
	 <div class="box-title">
		 <div >
			 <img src="~/Content/JqueryEasyUI/themes/icons/customed/user.png"   width="20" height="20" />
			 圖表1
		 </div>
		 <div >更多</div>
	 </div>
	 <div class="box-content" >
		 <div id="container1" ></div>
	 </div>
 </div>

完成以上的代碼,我們運行就可以看到下面的圖形了,這樣看起來是不是比較酷一些呢。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts

3、圖表的導出功能及菜單漢化

從上面的圖表里面看到,每個圖表的右上角,都有一個菜單的功能,里面有一些功能,如打印圖片、導出圖片等操作,具體菜單的表現(xiàn)如下所示。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts

但是上面的菜單式我經(jīng)過了漢化處理的, 默認的顯示效果是英文的,如下所示。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts

顯然英文的菜單,不是我們希望的,我們需要漢化一下才更好,那么如何漢化上面的通用菜單呢,需要每個模塊都重復一樣的漢化嗎,當然不需要了。我們可以把它放到全局設置里面。

前面我們介紹了,為了使得圖表展示更好的效果,我們包含了一個grid.js的圖表樣式,其實里面也還有其他樣式可以使用的,不過我覺得還是grid.js的樣式最佳,如下所示。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(4)--使用圖表控件Highcharts

那么既然使用了這個樣式設置,我們把全局的一些設置,如漢化的操作,也放到這里就可以了。

我們在這個文件的底部,增加一個SetOption的操作代碼就可以,這些漢化的菜單,由于我使用了最新版本,有些參數(shù)是和舊版本不一致的,所以沖著這個辛苦勁,應該推薦鼓勵下哦。呵呵

設置漢化的代碼。如下所示。

// Apply the theme
var highchartsOptions = Highcharts.setOptions(Highcharts.theme);

//漢化圖表菜單
Highcharts.setOptions({
    lang: {
        contextButtonTitle: "圖表菜單",
        printChart: "打印圖片",
        downloadJPEG: "下載JPEG 圖片",
        downloadPDF: "下載PDF文檔",
        downloadPNG: "下載PNG 圖片",
        downloadSVG: "下載SVG 矢量圖",
        exportButtonTitle: "導出圖片"
    }
});


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI