当包含在基于jQuery的选项卡中时,Google图表的负载非常小
Google Chart loads extremely small when included in jQuery-based tabs
我在这个jQuery选项卡插件中使用谷歌的折线图,几乎与演示完全一样——只是数据发生了变化——没有任何修改。可能有50%的时间,图表将以400x200加载,即使已指定以700x250加载。包含的div将具有适当的宽度和高度,但API呈现的图表将以400x200加载到其中。
我怀疑这是因为当API试图渲染时,选项卡不会显示。正因为如此,它试图在它认为为空的东西中进行渲染,从而迫使自己进入最小的默认分辨率。
我的想法是,如果图表的显示可以延迟到单击相应的选项卡,这将解决问题。遗憾的是,我不知道如何做到这一点,我的研究也没有取得丰硕成果。我能找到的最接近的线索是这个线索,但我没有在那里找到任何真正的答案。
如果你有任何建议,我将不胜感激,如有必要,我很乐意提供更多信息。
在隐藏的div中渲染图表(这是选项卡UI的非选择选项卡)会干扰可视化API检测维度的能力,因此您需要做两件事之一:要么在实例化选项卡之前渲染所有图表,要么(正如您所了解的)在首次打开选项卡时绑定事件侦听器来绘制图表。在图表选项中设置高度和宽度不足以解决所有浏览器中的问题。
我浏览了easytabs文档,看起来你应该能够做这样的事情:
// draw chart(s) in your default open tab
// track which tabs you've drawn charts in
var chartsDrawn = {
tab1: true,
tab2: false,
tab3: false
// etc
};
$('#tab-container').bind('easytabs:after', function (e) {
if (e.tab == 'tab-2' && !chartsDrawn.tab2) {
// draw chart(s) in tab 2
chartsDrawn.tab2 = true;
}
else if (e.tab == 'tab-3' && !chartsDrawn.tab3) {
// draw chart(s) in tab 3
chartsDrawn.tab3 = true;
}
// etc
});
根据需要更改图表选项以设置宽度和高度
var options = {
title: 'Company Performance'
,width:900
,height:500
};
这就是我使用角度引导解决问题的方法https://angular-ui.github.io/bootstrap/
<div class="google-chart" google-chart chart="chartObject1" on-ready="displayGoogleCharts()"></div>
<tab heading="Past Week" select="googleChartSizeFix()">
googleChartSizeFix = function() {
$('svg').parent().css({ opacity:"0" });
$(window).resize();
};
displayGoogleCharts = function() {
$('svg').parent().css({ opacity:"1" });
};
每次选择Tab(触发函数googleChartSizeFix)时,谷歌图表都会设置为透明(不透明度=0,因此它不会通过使用hide()而消失,但由于其内容是透明的,因此保持其大小),然后触发窗口调整大小,这迫使谷歌图表通过使用宽度100%和高度100%来适应包含它的div:
"options": {
"chartArea": {
"width":'100%',
"height":'100%'
}
}
最后,一旦谷歌图表准备好(调整大小后),就会触发displayGoogleCharts功能,谷歌图表的不透明度重置为1,因此内容再次可见。
我偶然发现了Bootstrap选项卡的这个"特性"。在HTML中剪切和粘贴多个选项卡时,我不小心将<div class="tab pane active">处于所有选项卡的"active"状态。结果是,所有选项卡的内容都按顺序显示在第一个选项卡中,但随着选项卡的切换而消失。
我对隐藏选项卡的解决方案是将它们定义为活动选项卡,然后在调用chart.draw.后从div中删除"活动"类
<div class="tab-pane active" id="myid" role="tabpanel">
<script type="text/javascript">
// all the chart stuff
chart.draw(data, options);
$('#myid').removeClass('active');
</script>
</div>
我看到jQuery选项卡也使用了"active"类。也许这个把戏在那里也行得通。
我解决了这个问题,在保存图表的元素中去掉了引导类,然后在加载图表后,应用引导类。
例如,假设我们想设置一个包含图表的可折叠:
<a href="#div-id" data-toggle="collapse">
Expand
</a>
<div id="div-id" class="future-collapse">
<div id="some-chart"></div>
</div>
然后在你的脚本中:
/**
* Callback function E.G. google.charts.setOnLoadCallback(drawChart);
*/
function drawChart(){
// Drawing the charts
draw_some_chart();
// Applying the collapse class to our elements with the future-collapse class
$('.future-collapse').attr('class', 'collapse');
}
function draw_some_chart(){
// Draw your charts
}
- 如何在Google柱状图中动态添加行/列
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 使用Google Visualization动态调用构造函数
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- Google Adsense多次加载脚本
- 单击超链接时,如何使用Google Maps API v3缩放地图
- Google电子表格getValue([cell containing ])不返回制表符
- 实现一个建立在google.com之上的自定义搜索引擎
- 使用Google Maps API向标记添加多个字符
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 回调函数中传递参数的困难(Google Map API Markers)
- 通过javascript操作图像,非常简单
- 在Chrome扩展内部输出Google API调用
- 如何使用Google Sheets API+Javascript阅读电子表格
- 如何使用javascript更改google repatcha的大小
- Google Apps 脚本在保护多个范围时运行时间非常慢
- 当包含在基于jQuery的选项卡中时,Google图表的负载非常小
- Google Maps API v3有一个非常奇怪的bug