首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D3JS振荡泡

D3JS振荡泡
EN

Stack Overflow用户
提问于 2016-12-14 01:52:13
回答 2查看 313关注 0票数 1

这对一些人来说可能微不足道,但我是D3JS的新手。

我试图绘制两个静态气泡,不透明度变化相对于一个数组。我能画出气泡,但我不能使它们的不透明度不断变化。我使用的是transitiondelay,透明度只能更改一次。这是我的代码示例

代码语言:javascript
复制
(function() {

  var dropsize = 100;
  var gapsize = 20;
  var osc = [[1, 1],[0.5, 0.5],[0, 0],[0.5, 0.5],[1, 1],[0.5, 0.5],[0, 0],[0.5, 0.5]];
  var radius = dropsize / 2;
  var h = 100;
  var w = (4 * radius + 3 * gapsize);
  var svg = d3.select("#chart").append("svg");
  var svg = d3.select("body")
    .append("svg")
    .attr("width", w)
    .attr("height", h)
    .style("background-color", "teal");
  var circles = svg.selectAll("circle")
    .data([radius, 3 * radius])
    .enter()
    .append("circle");
  circles.attr("cx", function(d, i) {
      return d + (i + 1) * gapsize;
    })
    .attr("cy", h / 2)
    .attr("r", function(d, i) {
      return radius;
    })
    .attr("fill", "orange")
    .attr("class", "droplet")
    .attr("id", function(d, i) {
      return "c_" + (i + 1);
    });
  d3.select("#c_1")
    .data(osc)
    .transition().delay(function(d, i) {
      return i * 1000;
    })
    .duration(1000)
    .attr("opacity", function(d) {
      return d[0]
    });
})();

见钢笔使用实时数据的D3.js气泡图

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-14 02:57:46

如果“连续”意味着要无限地运行转换,请使用on("end")再次调用转换函数。

下面是一个示例:

代码语言:javascript
复制
var toggle;

var data = [0, 1];

transition();

function transition() {
    toggle ^= 1;
    d3.select("circle")
        .transition()
        .duration(1000)
        .style("opacity", data[toggle])
        .on("end", transition);
}
代码语言:javascript
复制
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg>
	<circle cx="100" cy="100" r="50"></circle>
</svg>

票数 2
EN

Stack Overflow用户

发布于 2016-12-14 02:44:47

我认为连续的意思是平稳的转换,而不是立即从一种不透明状态切换到另一种不透明状态,而不是重复转换。

创建圆圈时,首先需要设置它们的初始不透明度:

代码语言:javascript
复制
.attr("opacity", 0)

然后使用d3.selectAll而不是d3.select,或者更好地使用变量circles

代码语言:javascript
复制
...

circles
  .data(osc)
  .transition()                        
  .delay(function(d,i){ return i*1000; })
  .duration(1000)
  .attr("opacity",function(d){ return d[0] });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41133547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档