2013-03-22 94 views
2

我有一個areaspline HighChart,我可以通過這種方式實現,我可以在Y軸上上下拖動系列點並返回新的點。我遵循這個例子http://jsfiddle.net/highcharts/AyUbx/。該系列產品的點是從以下陣列data = [6,4,13,6,21,22]編輯圖表後在HighChart上更新系列數組

在我的代碼有下面的函數創建:

drop: function() { 
$('#drop').html(
this.series.name + '</b> to</b> was set to <b>' + 
Highcharts.numberFormat(this.y, 2) + '</b>' 
), 
} 

這是更新我選擇我停下來後,用新的值來移動點的功能拖動點。

但是我正在努力讓自己的頭腦解決一兩件事。首先,例如,我將數組中的點4移動,並將值增加到8.當我移動這個點後記錄數組時,新的數組將返回x座標以及該點的新值,例如返回的數組現在是data = [6,1(or this.x value),8(new this.y value), 6,21,22]。或者,如果我登錄的series.data,則返回:

series.data = [object, Object],[object, Object],[object, Object],[object, Object],[object, Object],[object, Object] 

我假設它返回的x座標值,這樣的圖可以正確地讓你選擇移動點的新位置的原因。

我該如何返回更新this.y值的數組?所以在上面的例子中,返回的數組將是data = [6,8,13,6,21,22]或者只是將值Object返回給數組?

其次,當我完成編輯後記錄數組輸出時,它會記錄輸出兩次。這有什麼特別的原因嗎?

回答

0

我想通了這一點。這可能是一個迂迴的做法,但它有效。

因此,更多地看待這個問題,我更新後的點的新值將作爲數組[Xpos, Ypos]返回。所以在上面的例子中,data = [6,8,13,6,21,22]是我開始的數組和返回的新數組:data = [6,8,13,[Xpos,Ypos],21,22]

因此,要刪除新返回的數組中的Xpos值,我必須在數組更新後通過數組,並檢查數組中的每個元素,檢查它是否是數組的實例。如果它是一個數組的實例,我將該元素設置爲等於Ypos元素。這將自行返回該點的新值。

那麼,這樣做的目的是在下拉菜單中的功能在這個例子:

 function drop(e) { 
     if (dragPoint) { 
      if (e) { 
       var deltaX = dragX,// - e.pageX, 
        deltaY = dragY - e.pageY, 
        newPlotX = dragPlotX - deltaX, //dragPoint.series.xAxis.minPixelPadding, 
        newPlotY = chart.plotHeight - dragPlotY + deltaY, 
        series = dragPoint.series, 
        newX = dragX === undefined ? dragPoint.x : dragPoint.series.xAxis.translate(newPlotX, true), 
        newY = dragY === undefined ? dragPoint.y : dragPoint.series.yAxis.translate(newPlotY, true); 

       newX = filterRange(newX, series, 'X'); 
       newY = filterRange(newY, series, 'Y'); 
       dragPoint.update([newX, newY]); 
      } 

     //My code to remove the newX from after the dragPoint.update([newX, newY]);    
     for (var i = 0; i<data.length; i++) 
        { 
         if(data[i] instanceof Array) 
         { 
          data[i] = data[i][1]; 

         } 
         else 
         { 
          data[i] = data[i]; 
         }        
        } 
0

所有YDATA你可以找到:series.yData和示例:jSfiddle