2

私はエリアスプライン 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>'
 ),
}

これは、ポイントのドラッグを停止した後、移動するために選択したポイントを新しい値で更新する関数です。

しかし、私は 1 つまたは 2 つのことを理解するのに苦労しています。まず、たとえば、配列内のポイント 4 を移動し、値を 8 に増やします。このポイントを移動した後に配列をログに記録すると、新しい配列と x 座標が返されます。たとえば、返される配列は nowdata = [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 に、編集の終了後に配列の出力をログに記録すると、出力が 2 回ログに記録されます。これには何か特別な理由がありますか?

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 要素と等しく設定します。これは、ポイントの新しい値を単独で返します。

したがって、これが行われた場所は、この例のドロップ関数でした:

     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 に答える