国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

進一步封裝highchart,打造自己的圖表插件:jHighChart.js

2019-11-14 22:49:24
字體:
來源:轉載
供稿:網友
進一步封裝highchart,打造自己的圖表插件:jHighChart.js

Highcharts 是一個用純javaScript編寫的一個圖表庫, 能夠很簡單便捷的在web網站或是web應用程序添加有交互性的圖表。支持的圖表類型有曲線圖、區域圖、柱狀圖、餅狀圖、散狀點圖和綜合圖表。但是參考官網的實例,我發現如果在項目中頻繁使用highchart,按照它的方式還是挺復雜的,我這里所謂的復雜并不是難而是麻煩,因為你每寫一個圖表你就必須重新寫類似于下面結構的Javascript代碼:

$('#container').highcharts({        title: {            text: 'Monthly Average Temperature',            x: -20 //center        },        subtitle: {            text: 'Source: WorldClimate.com',            x: -20        },        xAxis: {            categories: ['Jan', 'Feb', 'Mar', 'A

所以如果在項目中使用必定是非常繁瑣的,很有必要對highchart進一步封裝。封裝說的簡單點就是找出共通點。多看幾個highchart的圖表源碼就會發現,他們無非就是這么幾個:標題(title、subTitle)、X軸(xAxis)、Y軸(yAxis)、圖例(legend)、數據點選項(plotOptions)、數據項(series),所以我們只需要對這些個元素進行處理即可。首先先看看我封裝的結果:

var jhc = new $.jHighChart({                renderTo: $("#numberCardChart"),                chart:{chartBgColor:"#FBFCFD"},                chartType: "column",                title: "商戶會員統計",                subtitle: "2014-2015會員統計",                xAxisName: "時間",                xCategories:responseData.categories,                yAxisSetting: [{ key: "numbers",name:"會員數" ,oppositeOption: false}],                yAxisColumn: [{ key: "numbers",name:"會員數"}],                series: responseData.series,                legend:{"enabled":false},                click: function (params) {                    queryNumberDetail(params);                }        });    jhc.create();

renderTo為展示的DIV ID,chart為圖表的設置、chartType圖表的展示類型、title主標題、subtitle副標題、xAxisName X軸名稱、xCategoriesX軸數據、yAxisSetting Y軸設置、series數據項。

整個highchart的配置option如下:

var options = $.extend({          //背景顏色              chart:{chartBgColor:'#FFFFFF',width:"",height:""},              //需要展示的位置(哪個DOM元素內)              renderTo: $(document.body),              //圖表類型:bar,line,spline,column,pie,area,areaspline,combine,bubble,scatter              chartType: "",              //圖表大標題              title: "",              //圖表小標題              subtitle: "",              //X軸名稱              xAxisName: "",              //X軸列表數據,是一個JSON的LIST對象              xCategories:{},              //Y軸設置,可添加多條Y軸, key-Y軸名稱,oppositeOption-true/false(true為right, false為left)              yAxisSetting: [{ key: "",name:"" ,oppositeOption: false}],              //key-Y軸對應數據,nane-名稱,chartType-圖形類型,yIndex-每個指標集需要對應的具體Y軸索引              yAxisColumn: [{ key: "",name:"",chartType: "", yIndex: 0, color: null}],              //圖表數據源,是一個JSON的LIST對象              series: {},              //Point MouSEOver事件              mouseOver: function () { },              //Point mouseOut事件              mouseOut: function () { },              //Point click事件:出發下鉆方法              click: function () { },              //是否開啟導出按鈕              exportButton: true,              //圖標容器大小              containerSize:{width:null,height:null},              //圖例選項:默認不顯示:具體的配置請參看API              legend:{enabled:false,layout:"",align:"",verticalAlign:"",floating:false,x:"",y:"",backgroundColor:"#FFFFFF"},              //數據點選項              //showInLegend:是否顯示餅圖圖例,dataEnable:是否顯示餅圖數據點              plotOptions:{showInLegend:false,dataEnable:false},              //基本參數設置:主要用于設置圖表高度、寬度              chart:{width:"",height:""}          }, setting);

上面是對javascript部分進行處理,封裝。但是我們的數據時通過后臺來的,怎么才能將后臺數據封裝到該插件中去呢?可能心細的博友發現了,在上面的使用方法中注意到了這兩個地方:xCategories:responseData.categories、series: responseData.series,responseData為后臺的返回數據,categories為X軸數據,series為數據項。在后臺我是這樣處理的:

201501300001

上面UML是實現后臺數據的結構圖、其中BuildChartsService為頂層抽象類,向外暴露buildCharts方法,實現圖表的子類需要實現createXAxisCategories、createSeries兩個方法。ChartBaseAction為構建圖表的基礎Action,通過Ajax請求,它的主要功能是提供基本的統計數據valueStack,并對數據項進行封裝處理。SeriesChartVO、SeriesDatasVO兩個類為圖表統計數據項的支撐類,其中SeriesChartVO為統計圖表數據選項VO,一個seriesChartVO對應一條記錄,jHightChart內部實現使用yAxisColumn的key與seriesChartVO的kye進行一一對應。SeriesDatasVO為統計圖表數,統計內部數據表現形式為:data:[{name:'',y:'',drilldown:'',params:''}],該類主要是用戶數據項的構建和配置,例如配置下鉆數據參數等等。

實例

請求Action繼承構建圖表ChartBaseAction:

public class QueryDailyStatisticsInfoAction extends ChartBaseAction{    private static final long serialVersionUID = 6822826781517049491L;        @Resource    private IHistoryStatisticsDailyTransService historyStatisticsDailyTransService;    @SuppressWarnings("unchecked")    @Override    public String execute() throws Exception {        List<JSON> list = (List<JSON>) getRequest().getsession().getAttribute("dailyList");                valueStack = historyStatisticsDailyTransService.getdailyStatisticsInfo(list);                getRequest().getSession().removeAttribute("dailyList");                return SUCCESS;    }}

該Action通過service的getdailyStatisticsInfo方法來獲取數據,然后構建基本的圖表數據參數Map

private Map<String, Object> buildDailyStatisticsInfo(List<String> categories,            List<JSON> list) throws ServiceException{        Map<String, Object> categoriesMap = new HashMap<String, Object>();        categoriesMap.put("list", categories);                Map<String, Object> seriesMap = new HashMap<String, Object>();        seriesMap.put("seriesList", list);                Map<String, Object> contentMap = new HashMap<String, Object>();        //X軸數據項        contentMap.put("categories", categoriesMap);        //數據項        contentMap.put("series", seriesMap);                BuildChartsService service = new DailyStatisticsInfoChart();        return service.buildCharts(contentMap);    }

最后使用DailyStatisticsInfoChart的buildChart方法來實現圖表數據構建

public class DailyStatisticsInfoChart extends BuildChartsService{    @SuppressWarnings("unchecked")    protected List<String> createXAxisCategories(Map<String,Object> xAxisMap) {        List<String> categories = (List<String>) xAxisMap.get("list");        return categories;    }    @Override    @SuppressWarnings("unchecked")    protected List<SeriesChartVO> createSeries(Map<String,Object> contentMap)            throws ServiceException {        List<JSON> jsons = (List<JSON>) contentMap.get("seriesList");                List<SeriesDatasVO> dataList = new ArrayList<SeriesDatasVO>();        SeriesDatasVO datas = null;        for(int i = 0 ; i < jsons.size() ; i++){            JSONObject json = JSONObject.fromObject(jsons.get(i));            String name = (String) json.get("payType");            Object y = json.get("amt");                        datas = new SeriesDatasVO(name, y);            dataList.add(datas);        }                SeriesChartVO chartVO = new SeriesChartVO("dailyStatistics", dataList);        List<SeriesChartVO> chartList = new ArrayList<SeriesChartVO>();        chartList.add(chartVO);                return chartList;    }}

構建完數據后,最后一步就是使用jHighchart來實現圖表了:

jhc = new $.jHighChart({                renderTo: $("#chartDIV"),                chartType: "pie",                title: "商戶日結算統計",                xAxisName: "",                xCategories:responseData.categories,                yAxisSetting: [{ key: "dailyStatistics",name:"交易額" ,oppositeOption: false}],                yAxisColumn: [{ key: "dailyStatistics",name:"總額"}],                series: responseData.series,                legend:{"enabled":false},                plotOptions:{"dataEnable":true},                click: function (params) {                    queryDetail(params);                }        });    jhc.create();

 

demo下載

chart.rar


-----原文出自:http://cmsblogs.com/?p=1537,請尊重作者辛勤勞動成果,轉載說明出處.

-----個人站點:http://cmsblogs.com


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会东县| 巍山| 海阳市| 黎平县| 全州县| 马关县| 东阳市| 富蕴县| 芦溪县| 射洪县| 准格尔旗| 隆回县| 新巴尔虎左旗| 肇东市| 确山县| 清远市| 东乡县| 三河市| 漾濞| 普安县| 铜山县| 论坛| 义马市| 西平县| 油尖旺区| 北流市| 武强县| 项城市| 岑巩县| 新野县| 丹棱县| 广元市| 清原| 双江| 外汇| 西吉县| 驻马店市| 防城港市| 新民市| 泉州市| 湘阴县|