2015-06-03 3 views
1

У меня есть подобная, но другая проблема в Highcharts: set 'select' state on a point and maintain it after mouseover?Highcharts: почему перерисовка изменяет радиус выбранной точки?

Это относится к тому, что происходит с оказанием точки после redraw события, а не mouseover события.

Я поставил определенную точку в точечной диаграмме, чтобы иметь «выбрать» состояние:

var chart = new Highcharts.Chart(options); 
chart.get('b').setState('select'); 

И я также определил select состояние следующим образом в параметрах диаграммы:

select: { 
    radius: 8, 
    enabled: true, 
    lineColor: 'red', 
    fillColor: 'red' 
} 

Точка красного цвета и имеет радиус 8, как вы можете видеть в этом JSFiddle: http://jsfiddle.net/o72xgtfm/3/

Однако, когда я запускаю redraw на диаграмма, цвет остается прежним (поэтому состояние select по-прежнему четко поддерживается на точке, то есть this question is not a duplicate of my other question about select state), но радиус уменьшается.

Почему? И как я могу получить радиус, чтобы оставаться установленным на 8 в этот момент?

+0

обновили вопрос ясно, что это не является дубликатом. – Richard

+0

Действительно непонятно, почему мой ответ был удален без каких-либо объяснений. Разве это не будет полезно для других людей Googling для того же самого? Я только добавил ответ, потому что хотел помочь людям! И, как ранее отмечалось, * это не дублирующий вопрос *. Я использую StackOverflow, потому что он полезен для всех: агрессивно маркирует не дубликаты и дубликаты, а также удаляет ответы, делает сайт хуже. – Richard

+1

Я согласен, что это технически не дубликат, хотя мне приходилось очень внимательно читать, чтобы понять, что это не так (и даже тогда я думаю, что это для обсуждения). Я проголосовал за повторное открытие. Я считаю, что разумно откатить ваше последнее редактирование или, по крайней мере, изменить свой комментарий, чтобы объяснить «как этот вопрос отличается от другого» (в отличие от высказывания мнения о процессе, который лучше оставить комментарии или мета-сообщение). – Jeroen

ответ

0

мне удалось исправить это в конечном итоге с помощью:

point.select(true, true); 

вместо

point.setState('select'); 

Последнее документированы, в то время как первый, кажется официальным способом делать вещи.

1

Это потому, что point.setState ('select') отличается от point.select (true).

Как вы отметили point.select() является частью API, и она работает - http://jsfiddle.net/o72xgtfm/5/

В самом деле часть point.select() код point.setState («выберите»), но это также устанавливает атрибут point - 'selected' в true и в point.options.selected to true.

select: function (selected, accumulate) { 
     var point = this, 
      series = point.series, 
      chart = series.chart; 

     selected = pick(selected, !point.selected); 

     // fire the event with the defalut handler 
     point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function() { 
      point.selected = point.options.selected = selected; 
      series.options.data[inArray(point, series.data)] = point.options; 

      point.setState(selected && SELECT_STATE); 

      // unselect all other points unless Ctrl or Cmd + click 
      if (!accumulate) { 
       each(chart.getSelectedPoints(), function (loopPoint) { 
        if (loopPoint.selected && loopPoint !== point) { 
         loopPoint.selected = loopPoint.options.selected = false; 
         series.options.data[inArray(loopPoint, series.data)] = loopPoint.options; 
         loopPoint.setState(NORMAL_STATE); 
          loopPoint.firePointEvent('unselect'); 
        } 
       }); 
      } 
     }); 
    }, 

Зная это, можно назвать point.setState («выберите») с теми же эффектами - http://jsfiddle.net/o72xgtfm/6/

chart.get('b').setState('select'); 
chart.get('b').selected = true; 
chart.get('b').options.selected = true; 
Смежные вопросы