从 Google 表格发布图表会产生固定宽度的结果
Publishing a chart from Google Sheets produces fixed-width result
客户端有许多 Google 电子表格,其中包含他们在工作簿中的新工作表上生成图表的数据。我提供了代码,使他们能够发布图表(之前生成了一个包含 JSON 的 <script>
元素),将发布的 JSON 复制粘贴到他们的 CMS 中,并让最终结果是生成的响应式<iframe>
。图表的width
选项会动态更改以匹配容器,并且在调整浏览器大小时重新加载图表的常用技巧可以保持这种方式。
但是,Google 表格已更新,客户的新图表只能选择发布为"链接"或"嵌入",后者只是包裹在前者的<iframe>
。由于<iframe>
以固定宽度发布,因此我更新了代码以处理此替代方法,动态更改了 iframe 的 width
属性。
问题是这个iframe的内部内容现在完全由Google以固定宽度生成,而不是与包含的iframe(我正在设置其宽度)匹配的宽度。
我无法进入 iframe 从脚本修改文档,因为它来自不同的域。嵌入在电子表格中的原始图表是响应式的(调整包含电子表格的浏览器窗口的大小可以很好地调整图表的大小),但我看不到任何方法可以在发布过程中保持这种效果。
我可以将所有内容移动到直接使用可视化 API 的脚本中,但它不使用客户端预先生成的图表(似乎他们生成的每个图表都是不同的样式/布局,这将是一场维护噩梦)。
那么:如何从 Google 表格文档中发布预先存在的图表,并使发布的结果以与原始图表相同的方式响应?
如果您可以接受缩放和较小的文本/细线。
解决方案是在 HTML head 部分中使用这种 JS + JQuery 缩放方法,这是 yazzz 在这里写的,在该链接中向她/他致敬,而不是在这里。
<head>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js">
</script>
<script>
// this script is written by yazzz https://stackoverflow.com/a/35819751/9894532
$(function() {
$("#wrapper").each(function() {
var $wrap = $(this);
function iframeScaler(){
var wrapWidth = $wrap.width(); // width of the wrapper
var wrapHeight = $wrap.height();
var childWidth = $wrap.children("iframe").width(); // width of child iframe
var childHeight = $wrap.children("iframe").height(); // child height
var wScale = wrapWidth / childWidth;
var hScale = wrapHeight / childHeight;
var scale = Math.min(wScale,hScale); // get the lowest ratio
$wrap.children("iframe").css({"transform": "scale("+scale+")", "transform-origin": "left top" }); // set scale
};
$(window).on("resize", iframeScaler);
$(document).ready( iframeScaler);
});
});
</script>
</head>
<body>
<p>Responsive and Dynamic Iframe Scaling of Published Chart from Google Spreadsheet</p>
<p>Courtesy of <a href="https://stackoverflow.com/a/35819751/9894532">yazzz from Javascript StackOverflow</a></p>
<div id="wrapper">
<iframe width="500" height="294" seamless frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/e/2PACX-1vRB4wPFarqsHWgk0ubQ6bH3YC5iwvDayAkrDg0iNPipAAszBA26QnFaPC1Xk5g8XF1ixP7jnsxiaMzL/pubchart?oid=1495533449&format=interactive"></iframe>
</div>
</body>
您可以在 JS Fiddle 中查看他/她对我的示例的实现
从我所看到的问题是谷歌表格画布通常是移动尺寸的 50% 左右,所以这是我的解决方案。这有点奇怪,但对我有用:
@media (max-width:500px) {
body p:has(iframe[src^="https://docs.google.com/spreadsheets"]) {
transform: scale(0.5);
transform-origin: top left;
}
body p iframe[src^="https://docs.google.com/spreadsheets"] {
min-width: 200%;
position: relative;
left: 100%;
margin-bottom: -180%;
}
}
- zurb基础中的固定宽度立柱3
- jquery插件或javascript方法自动调整文本输入(而非文本区域)(固定宽度)可变高度的大小
- 根据屏幕宽度自动调整固定宽度布局
- 需要使固定宽度的数据表具有响应性
- 使下拉导航跨越浏览器的宽度,即使父导航具有固定宽度
- 填充没有固定宽度的剩余水平宽度
- 固定背景图像水平连接到具有固定宽度的内容
- 如何将固定宽度和“自定义调整大小”长度设置为 Spring
- 在小数点后给出一个固定宽度的 JavaScript 数字,同时保留一个数字
- 从 Google 表格发布图表会产生固定宽度的结果
- 如何在具有固定宽度和水平滚动条的容器中具有高图表图表
- 如何在隐藏/显示跨度元素时保留固定宽度的显示
- 样式动态表,TD固定宽度
- 没有固定宽度的正文垂直滚动条
- 具有上一个/下一个按钮的固定宽度和高度的文本容器
- 如何使用谷歌图表onclick引导选项卡按钮固定宽度和高度
- 调整字体大小-固定宽度或流畅
- 如何在jquery对话框的固定宽度文本框中显示可变长度的文本
- 具有固定宽度的移动网页,可支持多个设备
- 如何将每行的字数限制为固定宽度