在echarts中自定義提示框內容

allenjiao發表於2018-06-14

1、期望效果

以柱狀圖為例,在滑鼠滑過每個資料標籤時,為了更友好地顯示資料內容,需要對顯示的資料內容作格式化處理,新增自定義內容。

如下圖,滑鼠滑過每個資料項時,
第1張是預設提示框;
第2張是處理成百分比資料後,顯示當前單個資料項的提示框;
第3張是處理成百分比資料後,顯示當前橫座標下多個資料項的提示框。

 
技術分享圖片
圖1、預設提示框.jpg
 
技術分享圖片
圖2、單項提示框.jpg
 
技術分享圖片
圖3、多項提示框.jpg

2、實現

(本文程式碼只涉及配置項的部分程式碼)

上述圖片的效果可用echarts的tooltip元件中的一個formatter方法實現,formatter支援字串和回撥函式兩種配置方式(本文只描述回撥函式的實現方式)。
(具體參考:http://echarts.baidu.com/option.html#tooltip.formatter)。

2.1 顯示單項資料內容

(處理上圖2提示框的效果)

/**
 * tooltip配置項示例
 */

//用formatter回撥函式顯示單項資料內容
tooltip: {
              trigger: ‘item‘, 
              formatter: function(data) 
              {
                  return data.name + ‘<br/>‘ +data.seriesName + ‘:‘+(data.value * 100)+‘%‘; //將小數轉化為百分數顯示
               }
          }

2.2 顯示多項資料內容

(處理上圖3提示框的效果)

/**
 * tooltip配置項示例
 */

//用formatter回撥函式顯示多項資料內容
tooltip: {
              trigger: ‘axis‘, 
              formatter: function(datas) 
              {
                  var res = datas[0].name + ‘<br/>‘, val;
                  for(var i = 0, length = datas.length; i < length; i++) {
                        val = (datas[i].value*100) + ‘%‘;
                        res += datas[i].seriesName + ‘:‘ + val + ‘<br/>‘;
                    }
                    return res;
               }
          }

2.3 formatter回撥函式的傳參

formatter回撥函式的傳參格式為:

 (params: Object|Array, ticket: string, callback: (ticket: string, html: string)) => string

描述:
1、params:
(1)當tooltip的trigger為‘item’時,顯示單項資料內容。formatter回撥函式的第一個引數傳入一個資料項物件;
(2)當tooltip的trigger為‘axis’時,顯示多項資料內容陣列。formatter回撥函式的第一個引數傳入當前類目下的資料項物件陣列。
2、ticket:非同步回撥標識,無需關心,用作callback的傳參。
3、callback:非同步回撥函式,傳遞ticket與填充內容的html兩個引數。

當tooltip的trigger為‘item’時,在控制檯中輸出的單項資料示例物件為:

{
    $vars: ["seriesName", "name", "value"],
    color: "#c23531",
    componentSubType: "bar",
    componentType: "series",
    data: 0.6,
    dataIndex: 2,
    dataType: undefine,
    dname: "1月3日",
    seriesIndex: 0,
    seriesName: "iphone6",
    seriesType: "bar",
    value: 0.6

}

其中,幾個重要的data物件屬性如下:
seriesName:系列名稱
value:當前資料值
name:資料名,類目名(上述柱狀圖中表示當前橫座標資料名)

模擬非同步返回提示框內容如下:

//用formatter回撥函式模擬非同步返回提示框內容
tooltip: {
             trigger: ‘item‘, 
             formatter: function(param, ticket, callback) 
             {
                 //用定時器模擬非同步事件
                   setTimeout(function() {
                       var res = param.name + ‘<br/>‘ +param.seriesName + ‘:‘+(param.value * 100)+‘%‘;
                       callback(ticket, res);
                   }, 1000);
                   return ‘‘;//內容還沒返回時顯示的內容
              }
         }

3、擴充套件-其他配置項的formatter

3.1 直角座標軸(xAxis/yAxis)中axisLabel的formatter

顯示效果為上圖2-單項提示框的y軸刻度資料。

//yAxis/xAxis配置項示例——用axisLabel 的formatter回撥函式處理資料格式
yAxis: {
           name: ‘銷量佔比‘,
           axisLabel : {
               formatter: function(value) {
                   if(value == 0) {
                       return value;
                   }else {
                       return value*100+‘%‘;
                  }
                        
               }
           }
         }

相關文章