javascript - D3 中的圆圈过渡

标签 javascript d3.js

我已经设置了一个带过渡的 D3 圆形动画。我使用最小日期作为初始数据点,最大日期作为转换的最终数据点。我的问题是:

我正在使用一个相当大的数据集,恐怕因为我只告诉过渡从最小到最大,它会错过中间的所有其他点,例如,如果圆 A 有一个中间疯狂跳跃?当我测试它时,它似乎刚刚跳过了跳跃。

有没有更好的方法来设置过渡以考虑其间的所有点?

最佳答案

如果您告诉对象从最小值转换为最大值,它只会尊重这两个值,并且正如您所说,它会跳过两者之间的任何有趣的跳跃。

我猜你目前通过插入所有数据来绘制一次图表。相反,您可以逐步将数据推送到图表:

var data = [{id: o1, v: []}, {id: o2, v: []}]; // values for 2 objects

function getTransform(d) {
    return "translate(" + d.v[d.v.length-1] + ")";
}

function update() {
  var elems = d3.selectAll(...).data(data, function(d) {return d.id;})
  elems.enter()
      .append(...) //append DOM/SVG objects and
      .attr(...)   //initalize their start values and
      .attr("transform", getTransform )  //their start animation values

  // animate the existing elements to move to their new values
  elems.transition().attr("transform", getTransform )
}

function play(){
    // pushing in "crazy" values
    data[0].v.push( Math.random()*10 );
    data[1].v.push( Math.random()*10 );
    update();
}

setTimeout(play, 500)
setTimeout(play, 1000)
setTimeout(play, 1500)

基本思想是不要一次将所有数据都扔到 d3 中,而是按照您希望动画显示的顺序和及时性添加数据。

此外,或者您可以设置一个时间索引并在 getTransform 函数中使用它来设置您想要的任何状态的动画。如果你一步一步地这样做,你会让动画使用你的“疯狂”值。

var time = 0;
var maxTime = 2;

function getTransform(d) {
    return "translate(" + d.v[time] + ")";
}

function next(){
    update();
    if(time++ < maxTime) setTimeout(next, 500)
}

play(); play(); play(); // add some data ;)
next()   // start index based playback from `time` to `maxTime`

您可能需要将超时值 500 与您想要的动画 duration(..) 速度相匹配,以使动画达到您的疯狂峰值。否则 d3 可能会使动画路径平滑(如果更新速度比动画快)。

关于javascript - D3 中的圆圈过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299227/

相关文章:

javascript - JQuery,replaceWith() 从 iframe 写入 session 后不起作用,除非刷新页面

javascript - 单击表单中的链接,将文本区域传递给 php 文件进行处理后更新文本区域

javascript - d3 中的弹跳球

javascript - 使用 API 中的对象数组作为 JSON 进行 d3 可视化时出现问题

javascript - 如何增加 Cloud Firestore 中的计数器

javascript - 在 Javascript(Web 应用程序)中读取和使用用户文件中的数据,而不上传它们

javascript - 在 Javascript 中,函数声明是创建构造函数的唯一方法吗?

javascript - 如何打开模态点击 SVG javascript d3

d3.js - 了解 d3 中的排序条形图

javascript - 在解析时使用变量过滤数据