首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用d3.js创建响应性svg

如何使用d3.js创建响应性svg
EN

Stack Overflow用户
提问于 2015-06-26 13:07:28
回答 3查看 880关注 0票数 2

我需要我的SVG在一个网页上,以动态调整大小的窗口大小,或有多硬编码宽度和高度。

我正在使用D3库。

我的问题是,不只是SVG标记需要不同的画布大小,还需要调整大小或完全重新呈现子元素(如rect标记和g标记)。

这是怎么做的?

我意识到我可以听窗口调整大小

d3.select(window).on('resize', resize);

用我的调整大小函数来做所有的逻辑,但是精确的选择(或计算)的宽度/高度是超出我的能力的。

代码语言:javascript
复制
<div class="svg-container">
<svg width="960" height="500" preserveAspectRatio="xMidYMid" class="svg-content">
   <defs>
     <clipPath id="clip-upper">
      <rect id="rect-clip-upper" width="960" height="305" x="-480" y="-305">      </rect>
</clipPath>
<clipPath id="clip-lower">
  <rect id="rect-clip-lower" width="960" height="195" x="-480" y="0"></rect>
</clipPath>
</defs>
   <g clip-path="url(#clip-upper)" transform="translate(480,305)"></g>
   <g clip-path="url(#clip-lower)" transform="translate(480,305)"></g>
 </svg>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-26 13:20:13

如果将viewBox添加到svg元素(例如,viewBox="0 0 960 500“),则不需要调整任何子元素的大小。

票数 2
EN

Stack Overflow用户

发布于 2015-06-26 13:35:44

不要硬编码一个宽度,而要使它依赖于svg的父级的宽度。例如。

代码语言:javascript
复制
width = svgParent[0][0].clientWidth - margin.left - margin.right;
height = svgParent[0][0].clientHeight - margin.top - margin.bottom;

确保所有的宽度、高度和位置都是根据数据计算的(在这种情况下,d3将处理它),或者以某种方式与宽度/高度相关联。然后,在您的调整大小处理程序中,只需对所有要调整大小的元素调用child.attr("width", newWidth)child.attr("x", newX)等。

如果使用axis,请将范围设置为新的宽度值,并再次调用axis函数(即svg.select(".x.axis").call(xAxis))。如果您正在使用缩放或其他类似功能,您将不得不再次调用它们。

票数 1
EN

Stack Overflow用户

发布于 2015-06-26 13:38:13

Hi SVG它自己建议“可销售的矢量图形”,因此它是自然响应的,因此您只需要使用"viewBox"属性的<svg>元素。用你的视角。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31074003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档