2015-02-24 2 views
0

Следующий jsfiddle показывает пример, где я помещаю текст на диаграмме, получая ширину/высоту этого текста, а затем используя ширину/высоту, чтобы определить, где снова разместить тот же текст, но на этот раз в середине диаграммы, и с ограничивающей рамки вокруг него:Ошибка в новом рендерерах с высоким разрешением?

http://jsfiddle.net/drmrbrewer/mfr0rd4b/3/

выше использует Highcharts 4.0.4.

some code 

Вот тот же самый код, но с использованием Highcharts 4.1.1:

http://jsfiddle.net/drmrbrewer/mfr0rd4b/4/

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

Это ошибка в новой версии?

Есть ли лучший способ выработать текст места, с ограничивающей рамкой, взламывать в центре диаграммы? До сих пор я помещал (невидимый) фиктивный текст, используя ширину/высоту, чтобы определить, где разместить реальный текст, а затем добавить ограничивающий прямоугольник. Вот почему я столкнулся с этой проблемой в новой версии.

ответ

0

Ну, я все еще не уверен, почему пример в OP сломался с 4.0.4 до 4.1.1, но частично ответил на мой вопрос, который по крайней мере обеспечивает решение, которое работает даже в 4.1.1, задается следующим jsfiddle:

http://jsfiddle.net/drmrbrewer/mfr0rd4b/7/

text = chart.renderer.text("My Text").add(); 
    textBBox = text.getBBox(); 
    x = chart.plotLeft + (chart.plotWidth * 0.5) - (textBBox.width * 0.5); 
    y = chart.plotTop + (chart.plotHeight * 0.5) - (textBBox.height * 0.25); 
    text.attr({x: x, y: y, zIndex: 10}); 

    rect = chart.renderer.rect(x, y, textBBox.width, textBBox.height, 2) 
     .attr({ 
      fill: '#FFFFEF', 
      stroke: 'gray', 
      'stroke-width': 1, 
      zIndex: 9 
     }) 
     .add(); 
    rectBBox = rect.getBBox(); 
    rect.attr({y: y - rectBBox.height*0.5 - textBBox.height*0.25}); 

Вторая загадка, почему это textBBox.height * 0.25 и не textBBox.height * 0.5 ...

EDIT ... Данг! Новое решение ломает когда я добавляю <br> разбить текст на строки:

http://jsfiddle.net/drmrbrewer/mfr0rd4b/8/

Любая идея, как исправить это?

+0

Я бы просто попытался использовать 'renderer.label' вместо' renderer.text': http://jsfiddle.net/mfr0rd4b/10/ Я немного смущен - зачем вам нужно обновлять позицию прямой, используя это ограничивающая коробка? Во всяком случае, чего вы действительно пытаетесь достичь? Что касается 'label' ->, он может включать в себя фон/поле/границы/тени и т. Д.: Http://jsfiddle.net/mfr0rd4b/12/ –

+0

Я обожаю highcharts ... независимо от проблемы, всегда есть решение! Похоже, этикетки - это путь, со встроенными параметрами ограничительной коробки и возможность использования
без проблем. Причиной для обновления позиции, основанной на ограничивающей рамке, является то, что просто поместить метку на основе plotWidth/2 и plotHeight/2 в том, что она поместит * угол * посередине. Чтобы получить ярлык по-настоящему центрированный, вам нужно знать его ширину и высоту и сдвинуть его на основе половины из них. Кстати, почему это 'textBBox.height * 0.25', а не' textBBox.height * 0.5' для этой цели? – drmrbrewer

+0

И, любой способ лучше контролировать прокладку ... Я нахожу, что прокладка даже не вокруг метки, например. см. http://jsfiddle.net/drmrbrewer/mfr0rd4b/13/. Кроме того, любой способ добавить радиус угла к ограничивающей рамке метки? – drmrbrewer

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