假设我有一个直方图脚本,可构建960 500 svg图形。如何使它响应,以便调整图形的宽度和高度是动态的?
<script>
var n = 10000, // number of trials
m = 10, // number of random variables
data = [];
// Generate an Irwin-Hall distribution.
for (var i = 0; i < n; i++) {
for (var s = 0, j = 0; j < m; j++) {
s += Math.random();
}
data.push(s);
}
var histogram = d3.layout.histogram()
(data);
var width = 960,
height = 500;
var x = d3.scale.ordinal()
.domain(histogram.map(function(d) { return d.x; }))
.rangeRoundBands([0, width]);
var y = d3.scale.linear()
.domain([0, d3.max(histogram.map(function(d) { return d.y; }))])
.range([0, height]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
svg.selectAll("rect")
.data(histogram)
.enter().append("rect")
.attr("width", x.rangeBand())
.attr("x", function(d) { return x(d.x); })
.attr("y", function(d) { return height - y(d.y); })
.attr("height", function(d) { return y(d.y); });
svg.append("line")
.attr("x1", 0)
.attr("x2", width)
.attr("y1", height)
.attr("y2", height);
</script>
还有另一种方法,不需要重新绘制图形,它涉及修改元素上的viewBox和preserveAspectRatio属性<svg>
:
<svg id="chart" width="960" height="500"
viewBox="0 0 960 500"
preserveAspectRatio="xMidYMid meet">
</svg>
15年11月24日更新
:大多数现代浏览器都可以从推断出SVG元素的长宽比viewBox
,因此您可能不需要保持图表的大小为最新。如果需要支持较旧的浏览器,可以在窗口调整大小时调整元素的大小,如下所示:
var aspect = width / height,
chart = d3.select('#chart');
d3.select(window)
.on("resize", function() {
var targetWidth = chart.node().getBoundingClientRect().width;
chart.attr("width", targetWidth);
chart.attr("height", targetWidth / aspect);
});
svg的内容将自动缩放。您可以在此处看到一个有效的示例(进行了一些修改):只需调整窗口或右下窗格的大小即可查看其反应。
问题内容: 我学到了几个区块。我已经借助jquery做出了响应式d3直方图。 现在,我想在使用ajax更新d3图表方面走得更远。 我刚进入jQuery。 并了解ajax的工作原理。 搜索了很长时间,但在官方d3网站或其他任何地方都找不到任何有效的示例。 任何帮助对我来说都是有益的,让我掌握了通过Ajax更新d3图表的基本功能。 提前致谢!! 问题答案: 您只需在ajax成功中调用d3函数:
我想创建一个网格布局与响应方块。 我觉得我应该可以这样做与CSS网格布局,但有麻烦设置高度每个正方形等于宽度。 在每一个方块之间设置一条阴沟也有困难。 我用Flexbox会更好吗? 目前我的HTML看起来像这样,但将是动态的,所以更多的方块可能会被添加。当然,它需要具有响应性,因此理想情况下使用媒体查询将其折叠为一列。 使用css网格,这是我所得到的 我能够用flexbox做得更远一些,并且能够使
问题内容: 我注意到我的代码具有响应性,事实上,如果我将其缩放到手机或平板电脑的大小,则所有文本,链接和社交图标都会相应缩放。 但是,唯一没有的是我在体内的形象。包裹在段落标签中…话虽如此,是否有一种简单的方法也可以使图像具有响应性? 这是我以前在体内显示图像的代码: 问题答案: 你可以尝试做 如果采用流畅的布局,则可以缩放图像。 为了响应(意味着布局对窗口的大小做出反应),您可以向图像添加一个类
问题内容: 我想创建一个带有响应正方形的网格布局。 我觉得我应该可以使用CSS Grid布局来做到这一点,但是在将每个正方形的高度设置为等于宽度时遇到麻烦。 在每个正方形之间设置水槽时也遇到麻烦。 使用flexbox会更好吗? 目前,我的HTML看起来像这样,但是它将是动态的,因此可以添加更多的正方形。当然,它需要响应,因此理想情况下将使用媒体查询将其折叠到一列。 使用CSS网格,据我所知 我可以
问题内容: 我有一个使用XML响应请求的服务器,我想在javascript中解析它。我真的很喜欢ActionScript XML解析器,它对我来说很容易使用。我在徘徊是否有一种非常简单/直接的方法来解析我从服务器获取的XML? 理想的用法应该是: fetchXML新的XMLParser。parser.parse访问文档。 顺便说一句,我计划使用jQuery。 问题答案: 一个普通的with 会解决
为了让这个布局正常工作,我已经挣扎了好几个小时。 这是我的代码: 每个片段都是一个简单的RelativeLayout(都有相同的视图): 现在我想让它像这样工作: > 1) 无嵌套layout_weight 2)完全没有嵌套(例如嵌套2个第一个片段等) 3)在视图呈现后,不使用代码以编程方式完成。 在我看来,最简洁、可读性最强的方法是将片段1和片段2的方向设置为水平,将片段3设置为垂直,但它不起作