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

tooltip error only when highstock's point num > 10, why?

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

但是,当我将 timeRange 更改为 "all" 时,将鼠标移动到第一个点不再导致任何错误,当我将 timeRange 更改回“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/>';                        
                       }                                                                                                                                                                                
                   }                                                                                                                                                                                    
               }                                                                                                                                                                                        
           }                                                                                                                                                                                            
    },                       
});
});

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

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

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

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