【问题标题】:Why does transition remove text from my labels?为什么转换会从我的标签中删除文本?
【发布时间】:2013-05-29 20:04:18
【问题描述】:

我有一个饼图,我正在尝试转换标签的旋转。出于某种原因,当我添加transition 时,文本被删除。我已经解决了我的问题:

http://jsfiddle.net/samselikoff/k69We/

图表呈现但没有标签。在第 110 行,取消注释 setTimeout 函数。一秒钟后,过渡将正常工作。

为什么没有 setTimeout 的过渡会吹走标签值?

【问题讨论】:

    标签: d3.js label transition


    【解决方案1】:

    代码中的错误行是第 65 行:

       piece.append("g").attr("class", "label").append("text").style("opacity", 0);
    

    第 93 行:

      g.selectAll(".label")
        .data(function(d) {return d;})
        .transition()
        .duration(500)
        // ...
        .select('text')
        // ...
        .style("opacity", 1)
    

    cancel this transition on text 在第 114 行开始一个新的转换:

              g.selectAll(".label")
              .select("text")
              .transition()
              .duration(500)
              // ... (opacity is not changed here)
    

    因此,textopacity 保持为零。您可以检查 DOM 以查看确实存在 text 元素(即没有被吹走),但不透明度为零。这是 D3v2.7 和 D3v3 之间的行为变化。

    现在有多种方法可以纠正这个问题,具体取决于您最初想要的行为。其中一种方法是:http://jsfiddle.net/zvPB6/ 拉直标签与其他转换同步。

    如果您想要straightening.delay(500),那么您可能必须监听end 事件并开始新的转换,以免延迟所有texts 上的整个转换。

    【讨论】:

    • 我确实知道元素仍然存在,但看到没有 text 值。我想后一个转换在设置其text 属性之前取消了前一个转换……对吗?而且,你的小提琴正是我想要的。谢谢!
    • 很高兴能提供帮助,是的,取消的过渡将解释 text 元素中缺少的 textContent
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2013-01-06
    相关资源
    最近更新 更多