Вы также можете обернуть метод drawLegendSymbol в круговой прототип и визуализировать все, что хотите, без каких-либо ограничений. Вам понадобятся те же события и методы, которые предлагает @ppotaczek.
(function(H) {
H.wrap(H.seriesTypes.pie.prototype, 'drawLegendSymbol', function(proceed, legend, item) {
var options = legend.options,
symbolHeight = legend.symbolHeight,
square = options.squareSymbol,
symbolWidth = square ? symbolHeight : legend.symbolWidth;
var series = this;
var halo;
item.legendSymbol = series.chart.renderer.rect(
square ? (legend.symbolWidth - symbolHeight) / 2 : 0,
legend.baseline - symbolHeight + 1, // #3988
symbolWidth,
symbolHeight,
H.pick(legend.options.symbolRadius, symbolHeight / 2)
)
.addClass('highcharts-point')
.attr({
zIndex: 4
}).add(item.legendGroup);
H.addEvent(item.legendItem.element, 'mouseover', function() {
halo = series.chart.renderer.rect(
square ? (legend.symbolWidth - symbolHeight) / 2 : 0,
legend.baseline - symbolHeight + 1, // #3988
symbolWidth,
symbolHeight,
H.pick(legend.options.symbolRadius, symbolHeight / 2)
)
.addClass('highcharts-point')
.attr({
fill: item.color,
'fill-opacity': 0.25,
zIndex: 1
})
.add(item.legendGroup);
halo.animate({
width: symbolWidth * 1.8,
height: symbolHeight * 1.8,
translateX: -symbolWidth * 0.4,
translateY: -symbolHeight * 0.4,
r: H.pick(legend.options.symbolRadius, symbolHeight / 2 + symbolHeight * 0.4)
}, 0);
});
H.addEvent(item.legendItem.element, 'mouseout', function() {
halo.animate({
width: symbolWidth,
height: symbolHeight,
translateX: 0,
translateY: 0,
r: 0
});
});
})
})(Highcharts)
Нет, нет никакой практической причины использования первой версии, мир не прекрасен, и ни один не программисты.
Удобочитаемость зависит от того, где Вы используете эту конструкцию. Я часто нахожу что-то как
(TestStateID == 1 ? true : false)
более читаемый.
IsTestActive = (TestStateID == 1);
определенно более читаемо.
Вы могли изложить доводы для определения константы
ACTIVE = 1
затем замена логической переменной IsTestActive
с
(TestStateID == ACTIVE)
Путем код теперь, состояние булевской переменной IsTestActive
будет ошибочно если состояние TestStateID
изменения, не обновляя булевскую переменную. Обход булевской переменной и тестирование реального источника информации, которая Вы после, удалят возможность этой ошибки.
Ну, я не знаю о других языках, но в PHP это еще проще, используя приведение типов:
$IsTestActive = (boolean)$TestStateId;