使用ViewBox根据窗口大小调整svg的大小

Jos*_*ose 16 javascript svg d3.js

我正在尝试使用ViewBox和preserveAspectRatio在窗口大小发生变化时自动调整我的d3.svg.arc ...

var svg = d3.select("#chart").append("svg") 
  .append("g")
  .attr("viewBox", "0 0 700 500")
  .attr("preserveAspectRatio", "xMinYMin meet")
  .attr("transform", "translate(" + r + "," + r +") rotate(180) scale(-1, -1)");
Run Code Online (Sandbox Code Playgroud)

我有点困惑为什么它根本不起作用 - 我也试图将保存设置为"无"并删除我拥有的任何设置边距.但仍然没有运气 - 任何帮助或建议将不胜感激.

这是一个例子:http://jsfiddle.net/xwZjN/53/

met*_*ion 27

你申请viewBoxpreserveAspectRatiog元素,需要将它们应用于svg元素:

var svg = d3.select("#chart").append("svg") 
  .attr("viewBox", "0 0 700 500")
  .attr("preserveAspectRatio", "xMinYMin meet")
     .append("g")
     .attr("transform", "translate(" + r + "," + r +") rotate(180) scale(-1, -1)");
Run Code Online (Sandbox Code Playgroud)

  • 因为你的`svg`变量实际上包含一个`g`元素,而不是SVG.但是,看到D3的例子,似乎惯例是用`svg`变量命名根级别`g`,所以你做对了(回答更新). (3认同)