当两次调用一个方法时,仅呈现一个SVG组件
Only one SVG component rendered when calling a method twice
我使用一个函数为单击设置事件处理程序,当它被触发时,格式副本会按预期进行(在外部控件上折叠,在内部控件上折叠)。然后,再次单击它,该过程将被收回。但是,下次执行操作时,只有外部组件更改其大小,而内部组件不会受到影响。
function pieClickOuter(target) {
var pie = d3.layout.pie()
.startAngle(0).endAngle(2 * Math.PI)
.value(function (d) { return d.val; });
var out = d3.svg.arc().innerRadius(90).outerRadius(99);
var org = d3.svg.arc().innerRadius(1).outerRadius(1);
var sub = d3.svg.arc().innerRadius(10).outerRadius(80));
d3.selectAll("#chart .sector path")
.transition().duration(1500).attr("d", out);
var grx = _.chart.selectAll(".subSector")
.data(pie(getData())).enter().append("g")
.attr("class", "subSector")
.on("click", pieClickInner);
grx.append("path")
.attr("d", org).style("fill", function (d) { return colors(d.value); });
grx.selectAll("#chart .subSector path")
.transition().duration(1000).attr("d", sub);
}
function pieClickInner() {
d3.selectAll("#chart .sector path")
.transition().duration(1500)
.attr("d", d3.svg.arc().innerRadius(80).outerRadius(99));
outerPieEvents(d3.selectAll("#chart .sector"));
d3.selectAll("#chart .subSector path")
.transition().duration(1000)
.attr("d", d3.svg.arc().innerRadius(1).outerRadius(1));
}
我一辈子都不明白为什么。根据控制台输出,所有步骤都已执行,因此事件似乎已正确重新设置。尽管如此,内部组件似乎不服从。
查看此小提琴
我相信你想要这样的东西。
我只更改了一个名称:
var grx = _.chart.selectAll(".subSector")
至
var grx = _.chart.selectAll(".foo")//or any other name
因此,我们不会选择已经存在的内容。
这种方法的问题在于,每次单击SVG都会有越来越多的组。但您可以避免在pieClickInner()
:中删除它们
d3.selectAll("#chart .subSector path")
.transition().duration(1000)
.attr("d", d3.svg.arc().innerRadius(1).outerRadius(1)).remove();
d3.selectAll("#chart .subSector text").attr("opacity", 0).remove();
d3.selectAll("g.subSector").transition().duration(1000).remove();
I、 就我个人而言,我不喜欢remove()
,我只是重新绑定数据。
相关文章:
- 将SVG元素拖动到另一个SVG元素上
- d3日历视图:如何将所有内容放在一个svg中,而不是放在几个svg中
- 如何将这两个图表放入一个SVG中
- 部分位于另一个SVG元素下方的SVG元素
- D3-使用一个SVG点击事件来影响另一个
- Svg文本元素被另一个Svg元素重叠
- 更改 <对象> 标记的属性,该标记使用 jQuery 包含一个 SVG 元素
- 如何将 svg 图像附加到另一个 svg 图像的矩形元素
- 如何在多个位置绘制svg,在另一个svg图像的顶部
- 如何在d3,js中的另一个svg之上添加svg
- 如何通过单击命令将一个SVG路径元素变形为另一个
- 嵌套在另一个SVG元素中的SVG元素的大小为0px*0px
- Snap.load()一个svg img并为其填充颜色设置动画's子节点
- RaphaelJS:在另一个SVG元素上绘制一条路径
- 在具有类的另一个SVG元素之前插入SVG元素
- 在一个 svg 中对图表的多个容器进行 D3 缩放行为
- 我可以将页面上已经存在的svg添加到另一个svg中吗
- 从 JavaScript 中获取一个 SVG 文件作为字符串
- 我如何使用一个svg文件与许多单独的svg's在html5中
- 我如何创建一个svg精灵,然后获得每个svg的坐标