编辑图表后,在HighChart上更新系列数组

时间:2013-03-22 16:03:26

标签: javascript jquery highcharts

我有一个areapline HighChart,我在其中实现的方式是我可以在Y轴上上下拖动系列点并返回新的点。我按照这个例子http://jsfiddle.net/highcharts/AyUbx/。这一系列点是从以下数组data = [6,4,13,6,21,22]

创建的

在我的代码中有以下功能:

 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返回到数组?

其次,当我在完成编辑后记录数组输出时,它会将输出记录两次。这有什么特别的原因吗?

2 个答案:

答案 0 :(得分:0)

您可以在series.yData和示例中找到所有yData:jSfiddle

答案 1 :(得分:0)

我想出来了。这可能是一种迂回的方式,但它确实有效。

因此,更多地研究这个问题,我更新后的一个点的新值将作为数组[Xpos, Ypos]返回。所以在上面的例子中,data = [6,8,13,6,21,22]是我开始的数组和返回的新数组:data = [6,8,13,[Xpos,Ypos],21,22]

因此,为了删除新返回数组中的Xpos值,我必须在更新后通过数组,并且对于该数组中的每个元素,检查它是否是数组的实例。如果它是数组的实例,我将该元素设置为等于Ypos元素。这会自动返回该点的新值。

所以这是在这个例子中的drop函数中完成的:

     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];
                        }                            
                    }