谷歌图表重绘/缩放窗口调整大小

the*_*dox 76 javascript jquery resize google-visualization

如何在窗口调整大小时重绘/重新缩放谷歌线图?

Hem*_*ela 61

要仅在窗口调整大小完成时重绘并避免多个触发器,我认为最好创建一个事件:

//create trigger to resizeEnd event     
$(window).resize(function() {
    if(this.resizeTO) clearTimeout(this.resizeTO);
    this.resizeTO = setTimeout(function() {
        $(this).trigger('resizeEnd');
    }, 500);
});

//redraw graph when window resize is completed  
$(window).on('resizeEnd', function() {
    drawChart(data);
});
Run Code Online (Sandbox Code Playgroud)


Tia*_*tro 36

谷歌的原始代码最后只是这样做:

var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
Run Code Online (Sandbox Code Playgroud)

使用一点javascript更改它,您可以在窗口调整大小时缩放它:

function resize () {
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
}

window.onload = resize;
window.onresize = resize;
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,当您通过ajax获取"数据"时,在每个窗口上触发XHTTPRequest调整大小"步骤"可能会对您的服务器造成压力,我认为以某种方式缓存ajax请求的结果会更好重用该数据,但您的解决方案适合我!+1 (23认同)
  • `window.onload = resize();`相当于`resize(); window.onload = undefined;` (3认同)
  • 对我不起作用,需要在再次绘制之前从 div 中删除旧的 rezults:$('#chart_div').empty(); (2认同)

Fon*_*ini 7

由于window.resize事件在每个resize事件上多次触发,我相信最好的解决方案是使用smartresize.js并使用smartdraw().这限制了图表重绘的数量window.resize.

通过使用提供的js,您可以像这样简单地执行:

// Instantiate and draw our user charts, passing in some options (as you probably were doing it)
var chart = new google.visualization.LineChart(document.getElementById('div_chart'));
chart.draw(data, options);

// And then:
$(window).smartresize(function () {
    chart.draw(data, options);
});
Run Code Online (Sandbox Code Playgroud)