2016-08-23 3 views
1

Я не могу получить tickinterval обновить в следующем Jsfiddle: https://jsfiddle.net/rarwarrar/5xgoqjst/4/Highstock Изменить клещ интервал на изменение выбора диапазона

В настоящее время это:

xAxis: { 
    events: { 
    setExtremes: function(e) { 
     if (e.rangeSelectorButton.text === "2Hour") { 
     $('#chart').highcharts().xAxis[0].tickInterval= 2700000 //45 min 
     $('#chart').highcharts().redraw() 
     } 
    } 
    } 
    }, 

не работает.

Например, может быть установлен интервал тика каждые 45 минут, как только нажимается «2 часа»?

+0

Первой проблемой является то, что ваша функция не работает (добавьте 'console.log()', чтобы видеть). Свойством 'event' должно быть' events'. Но он по-прежнему использует интервал в 15 минут, и я не знаю достаточно о высоких диаграммах, чтобы знать, почему. –

+0

Обновлено до событий, но, как вы указали, все еще не работает ... –

ответ

3

Вы можете использовать функцию tickPositioner для изменения позиций тика после установки крайностей. Вы можете использовать Axis.update() для обновления tickPositions этой оси:

setExtremes: function(e) { 
    if (e.rangeSelectorButton.text === "2Hour") { 
     this.update({ 
     tickPositioner: function() { 
      var positions = [], 
      info = this.tickPositions.info; 
      for (var x = this.dataMin; x <= this.dataMax; x += 45 * 60 * 1000) { 
      positions.push(x); 
      }; 
      positions.info = info; 
      return positions; 
     } 
     }, false) 
    } 
    } 

Здесь вы можете увидеть пример того, как это может работать: https://jsfiddle.net/5xgoqjst/5/

Вы должны быть в состоянии изменить tickPositions на различных диапазонах также.

С уважением.

+0

Спасибо, что отлично! –

1

Вы можете, но это будет путать с чтением текста «2 часа», но фактическое время должно быть 45 минут. Почему бы вам не добавить новую кнопку? Чтобы это показало, должно быть минимальное количество очков, но вы можете переопределить allButtonsEnabled. Вот что ваш rangeSelector может выглядеть следующим образом:

rangeSelector: { 
     allButtonsEnabled: true, 
    buttons: [{ 
     type: 'hour', 
     count: 2, 
     text: '2Hour' 
    }, { 
     type: 'hour', 
     count: 5, 
     text: 'Week' 
    }, { 
     type: 'day', 
     count: 1, 
     text: '2Weeks' 
    }, { 
     type: 'minute', 
     count: 45, 
     text: '45 minutes' 
    }], 
    selected: 1, 
    inputEnabled: false, 
    buttonPosition: { 
     x: 340 
    }, 
    buttonSpacing: 10 
    } 

А вот живой demo этого.

+0

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

+0

Ах, теперь я понимаю. Позвольте мне еще раз взглянуть. – wergeld

+0

Я попытался обновляемые 'event' в' events' и делает функции: 'XAxis: { события: { setExtremes: функция (е) { если (e.rangeSelectorButton.text === "2hour") { это. обновление ({ tickInterval: 2700000 }); //$('#chart').highcharts().xAxis[0].tickInterval = 2700000 // 45 мин. } } } }, но безрезультатно. Все еще нечетные интервалы времени для отметок. – wergeld

1

Может быть, это может помочь кому-то, я обновил существующий Fiddle ;-)

xAxis: { 
    events: { 
    setExtremes: function(e) { 
     if (typeof(e.rangeSelectorButton) !== 'undefined') { 
     // alert('count: ' + e.rangeSelectorButton.count + 'text: ' + e.rangeSelectorButton.text + ' type: ' + e.rangeSelectorButton.type); 
     if (e.rangeSelectorButton.type === "week") { 
      this.update({    
      tickInterval: 86400000, //1000*60*60*24 = 1 day 
      minorTickInterval: 86400000 
      }, false) 
     } 
     } 
    } 
    } 
} 

Тогда вам придется адаптировать его к вашему делу, конечно.

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