2013-03-22 93 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