javascript - 使用时间流逝的 d3 中的颜色过渡

标签 javascript d3.js

我一直难以理解一些 D3 概念(我对 javascript 相对较新,这无济于事)。我想要做的是有一个状态指示器,从绿色开始,慢慢变黄,然后慢慢变红。如果发生某些事件(按下按钮、收到消息等),我希望指示器返回绿色,重新开始转换。

这是一个简单的示例(在 jQuery 中),显示了基本的视觉效果(无法重置)http://jsfiddle.net/N4APE/

在 D3 中,我的想法是将背景颜色映射到经过的毫秒数。我试图创建一个这样的比例:

//10 sec is yellow, 30 sec is red
d3.scale.linear().domain([0, 10000, 30000]).range(["#00ff00", "#ffff00", "#ff0000"]);

但现在我有点迷路了。我一直在玩过渡、补间和插值器的组合,但我似乎没有取得任何进展。这是让它工作的一些可悲的尝试http://jsfiddle.net/Ebuwa/

我的问题:

  • 我不知道如何将经过的毫秒转换与我的比例相关联,然后设置背景颜色
  • 我的转换似乎在我创建它时运行,而不是在我调用它时运行,并且它在 错误的元素。
  • 我不确定在解决其他问题后如何重置过渡以使其保持绿色。

另一个注意事项,我可能会很高兴使用 svg 圆圈或类似的东西来代替,但我在操作 svg 填充属性时运气不佳,因为我有一个 html 背景属性。

谢谢

最佳答案

你真的不需要用秤做任何工作,.transition()将负责幕后的辛勤工作:

function changeElementColor(d3Element){
    d3Element
    .transition().duration(0)
      .style("background", "green")
    .transition().duration(1000)
      .style("background", "yellow")
    .transition().delay(1000).duration(5000)
      .style("background", "red");
}
changeElementColor(d3.select("#d3Color"));

要重置过渡,只需向元素添加一个 onclick 事件:

d3.select("#d3Color")
  .on("click", function(){ changeElementColor(d3.select(this)) });

http://jsfiddle.net/N4APE/2/

我还包含了一个彩色 svg 圆圈。我猜你正试图使用​​ .style("color", "red") 来改变它的颜色;对于非 CSS 属性,您需要使用 .attr("fill", "red")

关于javascript - 使用时间流逝的 d3 中的颜色过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438409/

相关文章:

javascript - 如何根据屏幕尺寸更改我的表格?

javascript - 如何延迟函数的一部分?

javascript - 如何更改 Electron 快速启动示例应用程序的 native 菜单

javascript - 当列是 JSON 数组而不是字符串时,如何在 ANTD 表上进行过滤

animation - D3.js - 嵌套对象的动画退出

d3.js - 可缩放 TreeMap 上的 D3 自动换行

javascript - d3js - 复制 SVG 元素,导致错误的输出

javascript - 如何使用 jQuery 将 HTML 中的 <li> 元素替换为不同的元素?

javascript - 在 d3 中用 2 种颜色填充 'rect' 背景

animation - D3 过渡到向上计数