有时您必须按照客户的意愿去做,我知道下面的方法不是最好的方法,但可能会对某人有所帮助)。据我所知,HighCharts 使用两种方式来可视化图表。它是SVG(例如受支持的 Chrome、IE > 8 浏览器)和VML(受 IE <=8 支持)。因此,每种方式都包含可以通过软中断解决此问题的点。
要在 SVG 中解决它,您必须找到 buildText 函数并在此时修改:
// check width and apply soft breaks
if (width) {
...
}
例如添加新的单独符号:
...
var words = span.replace(/\\/g, '\\ ').replace(/-/g, '- ').split(' '),
...
tspan.appendChild(doc.createTextNode(words.join(' ').replace(/\\ /g, '\\').replace(/- /g, '-')));
...
如果你想让它在 VML 中工作成为可能。您可以编写自己的函数,使其与 buildText 函数中的代码相同:
function softBreaks()
{
//if ie and vml
hasSVG = !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect;
if(!hasSVG)
{
//for each
$.each($('.highcharts-axis > span > div'), function(index, value) {
var width = value.parentNode.style.posWidth;
var div = value;
if (width) {
var words = value.innerText.replace(/\//g, '/ ').replace(/\\/g, '\\ ').replace(/\./g, '. ').replace(/-/g, '- ').split(' '),
tooLong,
actualWidth,
rest = [];
while (words.length || rest.length) {
//actualWidth = value.parentNode.offsetWidth;
actualWidth = value.parentNode.scrollWidth;
tooLong = actualWidth > width;
if (!tooLong || words.length === 1) { // new line needed
words = rest;
rest = [];
if (words.length) {
div = document.createElement("div");
value.parentNode.appendChild(div);
if (actualWidth > width) { // a single word is pressing it out
width = actualWidth;
}
}
} else {
div.removeChild(div.firstChild);
rest.unshift(words.pop());
}
if (words.length) {
div.appendChild(document.createTextNode(words.join(' ').replace(/\/ /g, '/').replace(/\\ /g, '\\').replace(/\. /g, '.').replace(/- /g, '-')));
}
}
}
});
}
}
在此之后,您必须在图表加载 www.highcharts.com/ref/#chart-events--load 时调用此函数(对不起,我是新用户)。如果页面上有多个图表,您可以将图表 ID 作为参数传递给 softBreaks() 函数。