仅当highstock的点数>时工具提示错误10,为什么?

时间:2017-07-13 09:43:23

标签: highcharts tooltip highstock

我写了一个新的" pointFormatter"函数显示2点之间的差距,例如jsfiddle,但是当我将鼠标移动到第一点" 7.Jan"时,工具提示没有正确显示,我在控制台中看到错误日志" TypeError:this.series.data [preIndex]未定义"

但是,当我将timeRange更改为" all"时,移动鼠标到第一个点不再导致任何错误,并且当我将timeRange更改回&#34时; 1w",也没关系。

更重要的是,如果我通过删除最后一个点将点数从10更改为9,那么错误就不再发生了。

为什么呢?哪件事引起了这个错误?

$(function() {
var chart = new Highcharts.StockChart({

    chart: {
        renderTo: 'container'
    },
    rangeSelector: {                                                                                                                                                                                 
           allButtonsEnabled: true,                                                                                                                                                                     
           buttons: [{type: 'week',count: 1,text: '1w'},                                                                                                                                              

                     {type: 'all',text: 'all'}                                                                                                                                                         
           ],                                                                                                                                                                                           
           selected: 0                                                                                                                                                                                  
   }, 
   series: [{
        name: 'USD',
        data: [
            [0,null],
          [86400000,null],
          [86400000*2,null],
          [86400000*3,null],
          [86400000*4,null],
          [86400000*5,null],
          [86400000*6,3],
          [86400000*7,4],
          [86400000*8,6],
         [86400000*9,8],
        ]
    }],
    plotOptions: {                                                                                                                                                                                   
           line: {                                                                                                                                                                                      
               step: 'left',                                                                                                                                                                            
               connectNulls: true,                                                                                                                                                                      
               tooltip: {                                                                                                                                                                               
                   pointFormatter: function () {                                                                                                                                                        
                       var preIndex = this.index - 1;                                                                                                                                                   
                       while (preIndex >= 0 && this.series.data[preIndex].y == null) {                                                                                                                  
                           preIndex--;                                                                                                                                                                  
                       }                                                                                                                                                                                

                       if (preIndex < 0) {                                                                                                                                                              
                           return '<span style="color:' + this.series.color + '">\u25CF</span>' + this.series.name + ': <b>' + this.y + '</b><br/>';                                                  
                       } else {                                                                                                                                                                         
                           var prePoint = this.series.data[preIndex];                                                                                                                                   
                           var prePointY = prePoint.y;                                                                                                                                                  
                           var prePointX = prePoint.x;                                                                                                                                                  

                           var day = (this.x - prePointX) / 86400 / 1000;                                                                                                                               
                           var add = this.y - prePointY                                                                                                                                                 

                           add_str = '(' + add + ')';                                                                                                                                                   

                           return '<span style="color:' + this.series.color + '">\u25CF</span>' + this.series.name + ': <b>' + this.y + '</b> ' + add_str + '<br/>';                        
                       }                                                                                                                                                                                
                   }                                                                                                                                                                                    
               }                                                                                                                                                                                        
           }                                                                                                                                                                                            
    },                       
});
});

1 个答案:

答案 0 :(得分:1)

Highstock具有数据分组功能 - 更多信息here

此功能可以更改series.data数组。相反,您可以使用series.options.data(来自选项的原始数据)或禁用dataGrouping。

  plotOptions: {
    line: {
      dataGrouping: {enabled: false},

示例:http://jsfiddle.net/6mpt8xv2/