0

Kendo UI では、ドラッグ イベントを使用するたびに画面の x と y の位置を取得できますが、Kendo UI チャート (折れ線グラフ) でシリーズ/データソース情報を取得する方法を教えてください。

以下のコードでは、ドラッグ イベントを使用して行文字 (時系列) の情報を強調表示し、データを出力しています。

 function createChart(data) {

            $("#TimeSeriesPlot").kendoChart({

                title: {
                    text: series_name.toUpperCase()
                },
                dataSource :{
                    data:data.timeseries,
                },
                series: [{
                    type: "line",
                     field:"v",
                    categoryField:"ts",
               }],
                 valueAxis: {
                    labels: {
                        format: "{0}"
                    },title:{
                        text: "value"
                    },
                    line: {
                        visible: false
                    },

                 },
                categoryAxis: {
                 labels: {
                  type: "date",

                },  
               tooltip: {
                    visible: true,
                   // shared:true,
                     template: "${category} - ${value}"
                },

                /***events start from here***/

                plotAreaClick: onPlotAreaClick,
                seriesClick:onSeriesClick ,
                dragStart:onDragStart ,
                drag:onDrag,
                dragEnd:onDragEnd 

            });
        }
}

function onSeriesHover(e) {
        console.log(kendo.format("Series hover :: {0} ({1}): {2}",
            e.series.name, e.category, e.value));
        }


function onSeriesClick(e){
       //   console.log(selected_anamolies);
         //  console.log(e.category);
           selected_anamolies.push("ts",e.category);
           selected_anamolies.push("v",e.value);
}

function onDragStart(e){

       //  console.log("dragstart"+e.axisRanges.ts);

        //   console.log("dragstart"+e.sender._highlight._points[0].value);
       //     console.log("dragstart"+e.sender._highlight._points[0].category);


}

function onDrag(e){

        var Rect = kendo.geometry.Rect;
        var draw = kendo.drawing;
        prevloc=e.originalEvent.x.startLocation;
        currentloc=e.originalEvent.x.location;

        var rect=new Rect([prevloc,50],[currentloc-prevloc,150]);
        var path = draw.Path.fromRect(rect,{  stroke: null,fill:{color:"#d3f1fb",opacity:0.2}});
        var chart = e.sender;
//   var surface = draw.Surface.create($("#surface"));
        chart.surface.draw(path);
                    //                        
}


function onDragEnd(e){
  console.log(dragEnd)

}
4

1 に答える 1

0

そのためには、マウスの位置から最も平行なチャート ポイントを見つける必要があります。次に、selectednodeがマウスの現在の位置に最も平行な点であるとします。これで、Dataitem 変数でそのポイントのデータを見つけることができますDataitem = selectednode._kendoNode.srcElement.chartElement.pointData.dataItem;

私はそれを私のために解決しました..

$("#yourchartdivid").on('mousemove', function (el, ui) {
  var child = $(document).find('circle');
  var childrens = [];
child.filter(function (e, data) {
   if (data.attributes.stroke.value == trendcolor[es].color) {
   childrens.push(data);
   }
});
  getfrombottom(el.clientY, el, childrens, el, trendcolor[es].trendname, controlkey);});

ここで、新しい関数 getfrombottom() を定義します

function getfrombottom(bottom, event, childrens, i, trendname, controlkey) {
for (var o = bottom; o > 0; o--) {
    for (var k = 0; k < childrens.length ; k++) {
        var originalmousepossition = event.pageY;
        var originalmouseposition = event.pageX - 9;
        var circlestopposition = childrens[k].parentNode.getBoundingClientRect().top;
        var circleleftposition = childrens[k].cx.baseVal.value;
        if (originalmouseposition - circleleftposition < 3) {            

var selectednode = childrens[k];


        Dataitem = selectednode._kendoNode.srcElement.chartElement.pointData.dataItem;
        return false;
        }
    }
}}

うまくいかない場合はお知らせください。

于 2015-10-16T07:39:12.807 に答える