【问题标题】:d3.js transition().remove() not workingd3.js transition().remove() 不工作
【发布时间】:2013-11-26 12:08:57
【问题描述】:

我在 d3.js 中的可视化有问题。

我有三个组包含几乎相同的可视化,是对“多个小型”可视化的看法。可视化包含时间线,在更改时必须添加/删除适当的数据点。这是进行更新的代码:

var channels = { bt: { x: 0, y: -100 }, sms: { x: -300, y: 200 }, call: { x: 300, y: 200 } };
        //Draw web for each channel
        for (channel in channels) {
            this.circles[channel] = this.web[channel].selectAll("circle")
                   .data(this.displayedNodes, function (d) {
                       return d.id;
                   });

            this.circles[channel].exit().transition().duration(500).attr("r", 0).remove();

            this.circles[channel].enter()
                   .append("circle")
                   .attr("class", "person")
                   .attr("r", 0)
                   .attr("cx", function (d) {
                       return d.friendScales[channel](chart.minScores[channel]).x;
                   })
                   .attr("cy", function (d) {
                       return d.friendScales[channel](chart.minScores[channel]).y;
                   })
                   .attr("fill", function (d) {
                       //return chart.clusterColors[d.cluster];
                       return chart.colors[channel];
                   })
                   .attr("stroke-width", 2)
                   .attr("stroke", function (d) {
                       return d3.rgb(chart.colors[channel]).darker();
                   })
                   .attr("id", function (d) {
                       return "bubble_" + d.id;
                   })
                   .on("mouseover", function (d, i) {
                       return chart.show_details(d, i, this);
                   })
                   .on("mouseout", function (d, i) {
                       return chart.hide_details(d, i, this);
                   });
        }

.exit().transition().remove() 部分什么都不做,圆圈只是滑开,因为它们的数据值现在为 0。但是,如果我打开 Chrome 控制台并手动输入完全相同的内容评估为,它工作正常。我认为这与 JavaScript 的异步模型有关,我不是 JS 专家,所以在这里我有点不知所措,这在任何其他语言中都应该没问题...

非常感谢任何想法!

从 cmets 中添加,因为它们变得越来越大:

工作示例:http://www.student.dtu.dk/~s103826/ 代码:https://github.com/haljin/d3-webchart/blob/master/Sensible/js/WebChart.js

要查看问题:将时间线上的灰色矩形(通过拖动边缘调整大小)拖到最后没有数据的区域 - 按照exit().transition().remove(),圆圈应该消失,但没有。但是,如果我在该区域设置断点并在 Chrome 控制台中输入相同的内容,它们会这样做。

【问题讨论】:

  • 它应该是这样工作的——你能发布一个完整的工作示例吗?
  • @LarsKotthoff 这是工作示例:link 这是完整代码:link
  • 这个例子对我来说看起来不错——我没有看到任何缩小的圆圈。到底哪里出了问题?
  • 如果您选择没有数据的时间段,如时间线(最后)所示,圆圈应该完全消失,因为this.displayedNodes 是 []
  • 对,看起来在循环之后,您正在为所有圆圈开始新的过渡。这将覆盖任何以前的转换。

标签: javascript d3.js


【解决方案1】:

感谢 Lars 的帮助,我重新选择了所有圈子,而不是使用现有的更新选择 this.circles :)

我现在觉得很傻。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2013-12-31
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多