2015-10-05 4 views
0

Я пытаюсь написать функцию обертки для «перетаскивания», чтобы при щелчке мышью и перетаскивании мышью я могу получить значение min/max выбранной области на xAxis. Когда я пытаюсь сделать следующее, я вижу, что e является MouseEvent, однако я не могу видеть e.min и e.max (они не определены).highcharts wrapper function for 'drag'

Highcharts.wrap(Highcharts.Pointer.prototype, "drag", function(p, e) { 
     console.log('drag started'); 
     console.log(e); 
     console.log(e.min, e.max); 
     p.call(this, e); 
    }); 

Кто-нибудь знает, что есть способ получить границу выбранной области на xAxis?

Большое спасибо!

+0

сделал это не решило проблему http://stackoverflow.com/questions/32528010/highchart-select -n-area-to-show-some-info-by-click-and-drag-mouse-but-not-re –

+0

@NishithChaturvedi Не совсем, тот, который вы описали, касается перетаскивания точки данных на диаграмме, однако , мой вопрос собирается получить зум в области, выбранной на диаграмме, перед выпуском мыши. Он больше похож на этот http://jsfiddle.net/highcharts/K7pN9/. Когда вы нажимаете мышью и перетаскиваете ее, вы увидите область, которая будет увеличена, но я хочу получить нужные данные перед выпуском. –

ответ

1

Вы можете сделать это следующим образом:

JSFiddle link

var axisMin = -1, axisMax = -1; 
 

 
$(function() { 
 
    Highcharts.wrap(Highcharts.Pointer.prototype, "dragStart", function(p, e) { 
 
     console.log('drag started'); 
 
     p.apply(this, Array.prototype.slice.call(arguments, 1)); 
 
     // the dragStart function sets this.mouseDownX for you 
 
     // documentation for Axis#toValue() function is here: 
 
     // http://api.highcharts.com/highcharts#Axis.toValue 
 
     axisMin = this.chart.xAxis[0].toValue(this.mouseDownX, 0); 
 
    }); 
 

 
    Highcharts.wrap(Highcharts.Pointer.prototype, "drag", function(p, e) { 
 
     // e.chartX represents the pixel position of the mouse pointer in the chart 
 
     axisMax = this.chart.xAxis[0].toValue(e.chartX, 0); 
 
     console.log('' + new Date(axisMin) + ' to ' + new Date(axisMax)); 
 
     p.apply(this, Array.prototype.slice.call(arguments, 1)); 
 
    }); 
 

 
    $.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=usdeur.json&callback=?', function (data) { 
 

 
     $('#container').highcharts({ 
 
      chart: { 
 
       zoomType: 'x' 
 
      }, 
 
      xAxis: { 
 
       type: 'datetime' 
 
      }, 
 
      series: [{ 
 
       data: data 
 
      }] 
 
     }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="http://code.highcharts.com/highcharts.src.js"></script> 
 
<script src="http://code.highcharts.com/modules/exporting.js"></script> 
 

 
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>

+0

Большое спасибо за это, это именно то, что я ищу. Большое спасибо за это. –

+0

Hi Vicky, просто интересно, есть ли способ получить значение даты всплывающей подсказки в функции обертки 'drag'? Причина, по которой я спрашиваю об этом, заключается в том, что когда-то ось axisMax должна быть округлена, чтобы соответствовать показателям даты во всплывающей подсказке. Иногда результат округления отличается. Например, если я перетаскиваю мышь туда где-то между пятницей и понедельником, осьMax будет когда-нибудь в субботу. –

+0

Да, я тоже это заметил, я не уверен, что вызывает ошибку. Но вы можете здесь найти исходный код 'Highcharts.Pointer' и посмотреть, помогает ли он: https://github.com/highslide-software/highcharts.com/blob/master/js/parts/Pointer.js#L342 –