javascript - 如何向此 JS PNG 转换器添加更多列? [ Highcharts ]

标签 javascript jquery svg highcharts

我正在使用下面的代码

http://jsfiddle.net/highcharts/gd7bB/

基本上它可以很好地满足我的目的,但在我的情况下它会生成一个长图像(在某些情况下我有一个像 300x7000 像素的图像!)

在代码中是这个函数:

 $.each(charts, function(i, chart) {
        var svg = chart.getSVG();
        svg = svg.replace('<svg', '<g transform="translate(0,' + top + ')" ');
        svg = svg.replace('</svg>', '</g>');

        top += chart.chartHeight;
        width = Math.max(width, chart.chartWidth);

        svgArr.push(svg);
    });

我正在尝试弄清楚如何使图形并排堆叠 3 个宽度,然后它进入下一行。

有点像这样(X 是一个图形):

X X X

X X X

代替:

X

X

X

有人知道我如何修改这段代码来做到这一点吗?我不知道从哪里开始。提前致谢!

最佳答案

本质上,它只是归结为逻辑和正确移动各个 SVG 之间的关系。正如您所指出的,Highcharts.getSVG 代码的基本行是:

svg = svg.replace('<svg', '<g transform="translate(0,' + top + ')" ');

下面 ( JSFiddle here ) 我做了一个粗略的例子来说明如何做到这一点,它归结为逻辑和在移动到新高度之前跟踪宽度(和“列”)(“行”):

Highcharts.getSVG = function(charts) {
    var svgArr = [],
        columns = 3, // How many columns you want
        top = 0,
        width = 0,
        currentTopMax = 0;
        currentWidth = 0,
        currentColumn = 0,
        index = 0;

    $.each(charts, function(i, chart) {
        var svg = chart.getSVG({chart:{width:chart.chartWidth, height:chart.chartHeight}});
        svg = svg.replace('<svg', '<g transform="translate(' + currentWidth + ',' + top + ')" ');
        svg = svg.replace('</svg>', '</g>');

        currentWidth += chart.chartWidth;

        currentTopMax = Math.max(currentTopMax, chart.chartHeight);
        width = Math.max(width, currentWidth);
        index++;

        if(++currentColumn % columns == 0) {
            top += currentTopMax;
            currentTopMax = 0;
            currentWidth = 0;
        }

        svgArr.push(svg);
    });

    if(index % columns != 0)
        top += currentTopMax;

    return '<svg height="'+ top +'" width="' + width + '" version="1.1" xmlns="http://www.w3.org/2000/svg">' + svgArr.join('') + '</svg>';
};

另请注意,您的原始代码存在问题,chart.getSVG 为每个单独的图表获取不正确的宽度,留下一些空白。原来的行是:

var svg = chart.getSVG();

已被替换为:

var svg = chart.getSVG({chart:{width:chart.chartWidth, height:chart.chartHeight}});

感谢 Joel Stransky finding that fix .

关于javascript - 如何向此 JS PNG 转换器添加更多列? [ Highcharts ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33920037/

相关文章:

jquery - 图片网址 : data:image/png;base64 (KineticJS)

javascript - 带有显示和隐藏功能的纯 JavaScript sibling ,现在是 jQuery

javascript - 如何在范围之间生成数组中所有可能的元素组合

javascript - 如何对 react 表中表行末尾的结果求和

javascript - 如何从 DIV 中调用此脚本?

jquery - Bootstrap 导航栏不保持顶部和宽度

javascript - canvas drawimage 在具有 css 高度和宽度的图像上无法正常工作

javascript - SVG 过滤器无法在 React 中渲染

css - d3 hover css 在图表停止时停止工作 "ticking"

html - 如何让背景图像/图像通过 CSS 拉伸(stretch)以填充容器?