所以我需要对我的项目一点帮助。我需要对页面的html部分的SVG进行语义缩放。它来自于上传,因此SVG几乎不受我的控制。我需要在该SVG上应用平移和缩放。我找到这个例子http://bl.ocks.org/mbostock/3680957并试图使用它。这里是我的小提琴(!!小提琴被删除,看更新波纹管!!)和你可以看到什么都没有发生。但在控制台中有警告d不确定。你能找到我在这里错了吗?Svg语义缩放不适用于HTML中的SVG
谢谢你们! :)
代码在这里:
HTML
<div id="cont">
<script src="http://d3js.org/d3.v3.min.js"></script>
<svg width="1000" height="500" id="map_cont">
<g>
<rect width="1000" height="500" fill="white"></rect>
<circle r="2.5" fill="blue" transform="translate(217.28118519969917,41.890758131264526)"></circle>
<circle r="2.5" fill="blue" transform="translate(608.2409059060647,344.2198244793161)"></circle>
<circle r="2.5" fill="blue" transform="translate(216.72484978866146,298.20041939104055)"></circle>
<circle r="2.5" fill="blue" transform="translate(476.96900214940524,237.46273824202763)"></circle>
<circle r="2.5" fill="blue" transform="translate(321.1504206509037,73.86045864552166)"></circle>
<circle r="2.5" fill="blue" transform="translate(490.2928916777491,357.3678736179799)"></circle>
<circle r="2.5" fill="blue" transform="translate(899.1499819566533,100.34312493154246)"></circle>
<circle r="2.5" fill="blue" transform="translate(334.13921027824017,165.69359981846532)"></circle>
<circle r="2.5" fill="blue" transform="translate(311.52586706987836,23.96973930478341)"></circle>
<circle r="2.5" fill="blue" transform="translate(378.0376019607231,331.57321612058746)"></circle>
<circle r="2.5" fill="blue" transform="translate(309.8850901872685,161.59290497259988)"></circle>
<circle r="2.5" fill="blue" transform="translate(253.86150170977407,-102.58470619117588)"></circle>
<circle r="2.5" fill="blue" transform="translate(514.6405714044365,453.63661200884786)"></circle>
</g>
</svg>
</div>
的Javascript:
var width = 1000,
height = 500;
var x = d3.scale.linear()
.domain([0, width])
.range([0, width]);
var y = d3.scale.linear()
.domain([0, height])
.range([height, 0]);
var svg2 = d3.select("#map_cont")
.select("g")
.call(d3.behavior.zoom().x(x).y(y).scaleExtent([1, 8]).on("zoom", zoom2));
var circle2 = svg2.selectAll("circle");
function zoom2() {
console.log(circle2);
circle2.attr("transform", transform);
}
function transform(d) {
return "translate(" + x(d[0]) + "," + y(d[1]) + ")";
}
UPDATE
那么一段时间,由于@Kaiido我取得了一些进展后, 。现在我有这个http://jsfiddle.net/syj4jhes/8/正如你所看到的,x和y坐标是错误的。现在我正在寻找帮助来正确计算它们...... :)
是的,但如果你看看到的例子中,没有定义的D太...我只是复制它,并努力去适应它... –
我认为这是因为你需要'circle2'来设置'data()'以循环所有项目。但是,即使手动设置(使用for循环),它也不起作用。但没有更多'd是未定义的'错误将会增加。但我不是d3的专家,所以也许有人有解决方案。 – Kaiido
帮助,谢谢队友!我解决了这个问题。现在我需要找出正确计算x和y坐标的方法。 –