2

我有一个 areaspline 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 坐标以及新的坐标一起返回该点的值,例如返回的数组是 now 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到数组中?

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

4

2 回答 2

0

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

于 2013-03-25T12:25:01.047 回答
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];
                        }                            
                    }
于 2013-04-17T14:29:42.803 回答