css - 响应式谷歌图表如何来自 iframe 标签?
问题描述
我想从谷歌表创建一个图表。我从电子表格中导出图表,获取一个 URL。但由于 cors 问题,我无法使其响应。所以,我认为整个 iframe 通过变换响应:缩放?但这不可能是一个好的解决方案。你有什么想法让这个 iframe 响应吗?
以下是我的片段:-
<div
class="responsive"
>
<iframe
width="698.1827830188679"
height="305.5"
seamless
frameborder="0"
scrolling="no"
src="https://docs.google.com/spreadsheets/d/e/2PACX-1vQuSWCpXJIwSPNJEE6iqzsJTxkPdSiL6uZaqph-CtMXh5QDw8Z9pESPB_0VenmhF4Dx6H5GLylHztAO/pubchart?oid=1827562470&format=interactive"
></iframe>
</div>
此外,您可以在下面查看小提琴,
解决方案
对于这个谷歌电子表格发布的图表,我也面临这个问题。顺便说一句,您的标题具有误导性,这不是 Google Chart,它是 Google 的另一个不同产品,用于创建真正合适的网络图表,它也可以是响应式的,也可以使用电子表格数据。
回到问题,“谷歌电子表格发布的图表”内容本身没有响应,它不是关于如何使 iframe 本身响应。
iframe 可以是响应式的,但我们无法将已发布的 Google 电子表格中的图表内容修改为响应式,afaik。
我已经尝试了一些类似的技巧,它只适用于视频和一些响应式内容网站。
http://jsfiddle.net/marhensa/g9op54wx/
还有一些像这样的巧妙技巧
https://codepen.io/alxfyv/pen/QEjEbp
但问题是 iframe内容也必须是响应式的。
如果您只是想让它工作并且非常简单,不要使用 iframe,使用简单的图像响应,只需将您发布的 Google 电子表格图表 URL 的末尾从 format=interactive 更改为 format=image
遗憾的是,解决此问题的正确方法只有 SCALING,就像您在问题中所说的转换/缩放它一样。如果 wrapper 的内容没有响应,并且您想像这个记录的示例一样动态调整它的大小(文本也会更小) ,那么就可以缩放它。顺便说一下,这个例子是一个 HTML 文本和一些图形页面,它在缩放时表现得像 SVG / 图像文件。
在这里解释:https ://css-tricks.com/scaled-proportional-blocks-with-css-and-javascript
也在 Angular 中完成:https ://stackblitz.com/edit/angular-vagpoq
编辑:如果你能忍受缩放和更小的文本/细线,工作解决方案是在 HTML 头部部分使用这个 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 中查看他/她对我的示例的实现
https://jsfiddle.net/marhensa/10radjqo
推荐阅读
- xamarin.forms - 使用浮动版本分发 NuGet 包的正确方法
- python - 匹配多个单词直到文档结尾
- oauth-2.0 - 用于 zoho 的 restsharp 的 oauth 响应
- typescript - 标识符实习在 TypeScript 编译器中是如何工作的?
- django - Django 频道无法在控制台中记录异常
- vue.js - Nuxt 验证整个文件夹的方法
- php - LARAVEL:MYSQL:完整性约束违规:1452 无法添加或更新子行:外键约束失败
- javascript - 外部 Javascript 仅在 Internet Explorer 上未定义
- sql - 如何提高 10M+ 记录表中的选择查询性能?
- ansible - set-fact 一个带有来自特定键的dict值的var