2016-04-29 2 views
1

У меня есть приложение с длинными сериями времени, и я хочу ограничить максимальный размер навигатора. Я нашел событие afterSetExtremes в документации, которое, как я думал, я мог бы захватить, а затем ограничить размер навигатора оттуда. Но это работает не так, как ожидалось. Кажется, я могу ограничить размер x данных. Но навигатор не соответствует размеру занесенных данных. Я что-то пропустил? Как я могу заставить его работать правильно? В идеале навигатор просто останется фиксированным по размеру в определенном размере. Этого можно достичь?Как я могу ограничить размер навигатора в highstock.js?

Здесь jsfiddle:

http://jsfiddle.net/jn3cww8n/2/

$(function() { 
$('#container').highcharts('StockChart', { 
    xAxis: { 
     events: { 
      afterSetExtremes: function(e) { 

       var dmin = Math.abs(e.min - this.oldMin), 
        dmax = Math.abs(e.max - this.oldMax), 
        range = e.max - e.min, 
        new_min = e.min, 
        new_max = e.max, 
        yr_range = range/1000/60/60/24; 
       if (0.0 === dmin && 0.0 < dmax) { 
        $('#report').html('Max changed ' + yr_range); 

        if (31536000000.0 < range) { 
         $('#report').html('setting new max'); 
         new_max = new_min + 31536000000.0; 
        } 

       } else if (0.0 < dmin && 0.0 === dmax) { 
        $('#report').html('Min changed ' + yr_range); 

        if (31536000000.0 < range) { 
         $('#report').html('setting new min'); 
         new_min = new_max - 31536000000.0; 
        } 

       } else { 
        $('#report').html('Nothing changed'); 
       } 

       this.setExtremes(new_min, new_max); 

      } 
     } 
    }, 
    rangeSelector: { 
     selected: 1 
    }, 
    series: [{ 
     name: 'USD to EUR', 
     data: usdeur 
    }] 
}); 
}); 
+0

Пункт навигатора состоит в том, что он дает вам обзор всего диапазона серий, который у вас может быть. Если вы хотите ограничить то, что вы можете увидеть/перейти, то, возможно, усечь свою серию, чтобы включить только диапазон значений, которые вы хотите? – wergeld

+0

Пользователи должны иметь возможность перемещаться по тому периоду, который они хотят видеть, но я хочу ограничить период, который они могут видеть в большем временном ряду. Поэтому я не могу урезать временные ряды. Группирование данных не работает ни потому, что временные ряды не имеют смысла на основе группировки данных ... – c00kiemonster

+0

Что вы подразумеваете под «ограничением периода, который они могут видеть из большего числа временных рядов»? Вы имеете в виду (например), если набор данных ежечасно вы хотите, чтобы пользователь видел данные для недельных интервалов времени? Или вы имеете в виду, если есть данные для JAN для DEC, вы хотите, чтобы они могли просматривать данные с APR до AUG? – wergeld

ответ

1

Я изменил тактику на этом. Вместо того, чтобы иметь максимальный размер навигатора, я запретил пользователям изменять свой размер в целом.

У меня возникла идея от this сообщение.

всего два изменения, которые необходимо:

  1. Blank Функция drawHandle Highcharts.Scroller.prototype.drawHandle = function() {};
  2. Commment из нескольких строк:

    22472,22476c22472,22476 
    
    <      //if (isOnNavigator && math.abs(chartX - zoomedMin - navigatorLeft) < handleSensitivity) { 
    
    <       //scroller.grabbedLeft = true; 
    
    <       //scroller.otherHandlePos = zoomedMax; 
    
    <       //scroller.fixedExtreme = baseXAxis.max; 
    
    <       //chart.fixedRange = null; 
    
    --- 
    
    >      if (isOnNavigator && math.abs(chartX - zoomedMin - navigatorLeft) < handleSensitivity) { 
    
    >       scroller.grabbedLeft = true; 
    
    >       scroller.otherHandlePos = zoomedMax; 
    
    >       scroller.fixedExtreme = baseXAxis.max; 
    
    >       chart.fixedRange = null; 
    
    22479,22483c22479,22483 
    
    <      //} else if (isOnNavigator && math.abs(chartX - zoomedMax - navigatorLeft) < handleSensitivity) { 
    
    <       //scroller.grabbedRight = true; 
    
    <       //scroller.otherHandlePos = zoomedMin; 
    
    <       //scroller.fixedExtreme = baseXAxis.min; 
    
    <       //chart.fixedRange = null; 
    
    --- 
    
    >      } else if (isOnNavigator && math.abs(chartX - zoomedMax - navigatorLeft) < handleSensitivity) { 
    
    >       scroller.grabbedRight = true; 
    
    >       scroller.otherHandlePos = zoomedMin; 
    
    >       scroller.fixedExtreme = baseXAxis.min; 
    
    >       chart.fixedRange = null; 
    
    22486,22487c22486 
    
    <      //} else if (chartX > navigatorLeft + zoomedMin - scrollbarPad && chartX < navigatorLeft + zoomedMax + scrollbarPad) { 
    
    <      if (chartX > navigatorLeft + zoomedMin - scrollbarPad && chartX < navigatorLeft + zoomedMax + scrollbarPad) { 
    
    --- 
    
    >      } else if (chartX > navigatorLeft + zoomedMin - scrollbarPad && chartX < navigatorLeft + zoomedMax + scrollbarPad) { 
    

Довольно очистить все во всем.

Смежные вопросы