iChart--組件定製

導語

ichartjs是一款基於HTML5的圖形庫。使用純javascript語言, 利用HTML5的canvas標籤繪製各式圖形。 ichartjs致力於爲您的應用提供簡單、直觀、可交互的體驗級圖表組件。是WEB/APP圖表展現方面的解決方案 。若是你正在開發HTML5的應用,ichartjs正好適合您。 ichartjs目前支持餅圖、環形圖、折線圖、面積圖、柱形圖、條形圖。ichartjs是基於Apache License 2.0協議的開源項目。javascript

No1.一分鐘快速入門教程-Hello World

千里之行,始於足下。咱們先從Hello World開始。java

首先引入js文件

<script type="text/javascript" src="ichart.1.2.min.js"></script>

代碼片斷

//定義數據
$(function(){   
            var chart = new iChart.Column2D({
            render : 'canvasDiv',//渲染的Dom目標,canvasDiv爲Dom的ID
            data: data,//綁定數據
            title : 'Hello World\'s Height In Alphabet',//設置標題
            width : 800,//設置寬度,默認單位爲px
            height : 400,//設置高度,默認單位爲px
            shadow:true,//激活陰影
            shadow_color:'#c7c7c7',//設置陰影顏色
            coordinate:{//配置自定義座標軸
            scale:[{//配置自定義值軸
                position:'left',//配置左值軸 
                start_scale:0,//設置開始刻度爲0
                end_scale:26,//設置結束刻度爲26
                scale_space:2,//設置刻度間距
                listeners:{//配置事件
                    parseText:function(t,x,y){//設置解析值軸文本
                        return {text:t+" cm"}
                    }
                }
            }]
        }

運行結果

柱狀圖

至此,簡單的入門已經完成,可是不能僅限於此,拓展下思路,若是柱狀圖不單單是單色填充,而是各式各樣的圖形,或者具備漸變效果的填充,該如何實現呢?canvas

No2.定製屬於本身的柱狀圖

首先看看我想實現的效果
土地建設狀況
再有:this

貨幣匯率

查閱了ichart官方的demo和文檔,未看到這方面的效果,只能本身動手,豐衣足食了。spa

字符串圖形

首先實現一個相對簡單的,繪製各類字符串。因爲ichart底層是基於canvas的,因此只要拿到畫筆,想畫什麼畫什麼,想畫哪裏畫哪裏。
首先運行上面的HelloWorld,單步調試,找到最終繪製的入口。調試

doDraw:function(_){
    if(_.get('actived')){
        _.drawRectangle();
    }
},

這裏就是最終繪製的入口,可見源碼中僅僅能夠繪製矩形,好單一的感受。
修改後的這個的入口:code

doDraw:function(_){
    if(_.get('actived')){
      var _ = this._();
      var type = _.options.type;
      if(type === 'slash'){
        _.drawSlash();
      }else if(type === 'innerRect'){
        _.drawInnerRect();
      }else if(type === 'wire'){
        _.drawWire();
      }else if(type === 'star'){
        _.drawStar();
      }else if(type === 'exclamation'){
        _.drawExclamation();
      }else if(type ==='innerRectAndLine'){
        _.drawInnerRectAndLine();
      }else if(type === 'judge'){
        _.drawJudge();  
      }else{
        _.drawRectangle();
      }
    }
  },

默認依然繪製矩形,可是根據傳入的類別,能夠繪製圖形的圖形,如type==='exclamation',程序會調用_.drawExclamation();方法,咱們看看drawExclamation()方法的定義:教程

drawExclamation: function() {                                                  
   var _ = this._();
   var x = _.get(_.X), y = _.get(_.Y), w=_.get(_.W), h=_.get(_.H), border=_.get('border'), f_color=_.get('f_color'), shadow=_.get('shadow');
   _.T.box(
    _.get(_.X),
    _.get(_.Y),
    _.get(_.W),
    _.get(_.H),
    _.get('border'),
    _.get('f_color'),
    _.get('shadow'));
   var character = _.options.character && _.options.character.value;
   _.T.textStyle(_.L, 'middle', $.getFont(_.get('fontweight'), _.get('fontsize'), _.get('font')));
   _.T.fillText(character, x + w/2 - _.T.measureText(character)/2, y+h/2, _.get('textwidth'), border.color);
 },

代碼中顯示,首先繪製矩形Box,其次繪製傳入的文字,這樣咱們的貨幣匯率表就很容易實現了。事件

字符串圖表

陰影圖形

drawSlash: function(){
    var _ = this._();
    var x = _.get(_.X), y = _.get(_.Y), w=_.get(_.W), h=_.get(_.H), border=_.get('border'), f_color=_.get('f_color'), shadow=_.get('shadow');
    _.T.box(
      _.get(_.X),
      _.get(_.Y),
      _.get(_.W),
      _.get(_.H),
      _.get('border'),
      _.get('f_color'),
      _.get('shadow'));
    var difcount = 9;
    var a = h/w, dx = parseInt(w/difcount), dy = dx * a;
    for(var i = x + dx;i<= x+w; i+=dx){
      var x0 = i - border.width,y0 = y + border.width;
      var x1 = x + border.width, y1 = y + dy * (i-x)/dx - border.width;
      _.T.line(x0,y0,x1,y1, border.width, border.color, false);
      if(i !== x){
        var x0 = i - border.width,y0 = y + h - border.width;
        var x1 = x + w - border.width, y1 = y + dy * (i-x)/dx - border.width;
        _.T.line(x0,y0,x1,y1, border.width, border.color, false);
      }
    }
  },

效果圖:ip

一我的的狂歡

其餘形狀的圖標相似,再也不陳述。多看看一些效果圖吧:

相關文章
相關標籤/搜索