为了让它们成为热插拔/可拖动/可缩放的,我一直在玩Mike Bostock的d3 three little circles示例。svg元素层/重叠/叠加/叠加
,而这样做,我碰到一个问题(使用Firefox 16.0.2,顺便说一句 - 通常罚款SVG)偶然发现这虽然本身并不严重,莫名其妙的错误我:即虽然总是出现在生成的HTML,任何尝试在覆盖矩形可视区域与按钮元素失败。
我试过以下每条建议在this交换的脚下,但这些都没有影响。
这里我的基本代码,其中按钮显示外部圆的包含svg视图区域。的分组是准备与拖n个墨滴/可扩展性的实验的一部分:
var root = d3.selectAll("g#tool-2");
var g0 = root
.append("g")
.attr("class", "g0")
.attr("id", function (d, i) { return d.tool});
var g01 = g0
.append("g")
.attr("class", "g01")
.attr("id", function (d, i) { return d.tool});
var g02 = g0
.insert("g")
.attr("class", "g02")
.attr("id", function (d, i) { return d.tool});
var svg = g01
.insert("svg")
.attr("width", width)
.attr("height", height);
var button = g02
.append("div")
.attr("class", "button")
.attr("id", function (d, i) { return d.tool})
.append("button")
.text(function(d) { return "Run" });
svg.selectAll(".little")
.data(data)
.enter()
.append("circle")
.attr("class", "little")
.attr("cx", x)
.attr("cy", y)
.attr("r", 12);
console.log("Got past circle creation");
button
.on("click", function() {
svg.selectAll(".select").remove();
svg.selectAll(".select")
.data(data)
.enter()
.append("circle")
.attr("class", "select")
.attr("cx", x)
.attr("cy", y)
.attr("r", 60)
.style("fill", "none")
.style("stroke", "red")
.style("stroke-opacity", 1e-6)
.style("stroke-width", 3)
.transition()
.duration(750)
.attr("r", 12)
.style("stroke-opacity", 1);
});
追加到根,G0,G01 G02或任何,按钮显示的矩形容器的外部。一切都很好。这里,例如,从代码产生的HTML上面所示:
<g id="tool-2" class="g0">
<g id="tool-2" class="g01">
<svg height="180" width="360">
<circle r="12" cy="45" cx="180" class="little"></circle>
<circle r="12" cy="90" cx="60" class="little"></circle>
<circle r="12" cy="135" cx="300" class="little"></circle>
<circle style="fill: none; stroke: red; stroke-opacity: 1; stroke-width: 3;" r="12" cy="45" cx="180" class="select"></circle>
<circle style="fill: none; stroke: red; stroke-opacity: 1; stroke-width: 3;" r="12" cy="90" cx="60" class="select"></circle>
<circle style="fill: none; stroke: red; stroke-opacity: 1; stroke-width: 3;" r="12" cy="135" cx="300" class="select"></circle>
</svg>
</g>
<g id="tool-2" class="g02">
<div id="tool-2" class="button">
<button>Run</button>
</div>
</g>
</g>
不管然而使用,无论是使用
- z索引追加元件的
- X & y坐标
- dx & dy坐标
- 带或不带ID
- 带或不带吨类
- 具有或不具有定位
..the按钮,虽然存在于所得到的HTML,要么继续被示出的容器的外部,或根本就没有显示。
似乎有一个svg覆盖与我真的不熟悉的问题。任何提示?
感谢 暴徒
您好托马斯,感谢您的建议。 foreignObject实际上是我尝试过的各种容器元素之一(g,div,foreignObject,svg)。我给了它一个新的尝试,但得到相同的奇怪行为。鉴于尝试的广度,我开始怀疑这个问题超出了简单分层或结构的问题。 :-( – user1019696
我添加了一个工作示例,这有帮助吗? –
非常感谢,托马斯,我真的不知道我是否能找到我的方式来获取这些信息。最重要的是,我看到它的工作原理。 :-) 决定按钮的正确位置是用foreignObject(和requiredExtensions属性)替换svg。 另一方面,无论添加到顶级svg元素还是最低级别(按钮)div,xml属性似乎都没有影响。 现在我所要做的就是弄清楚为什么这在我自己的代码中无效...... :-) – user1019696