d3.js - 刷新 d3 v4 过渡

标签 d3.js transition

有人知道“冲洗”过渡的方法吗?
我有一个定义如下的过渡:

this.paths.attr('transform', null)
  .transition()
  .duration(this.duration)
  .ease(d3.easeLinear)
  .attr('transform', 'translate(' + this.xScale(translationX) + ', 0)')

我知道我能做到
this.paths.interrupt();

停止过渡,但这并没有完成我的动画。我希望能够“刷新”立即完成动画的过渡。

最佳答案

Andrew's answer是一个伟大的。但是,出于好奇,我相信可以在不扩展原型(prototype)的情况下使用 .on("interrupt"作为听众。

在这里,我无耻地复制 Andrew 代码进行转换和 this answer用于获取目标属性。

selection.on("click", function() {
    d3.select(this).interrupt()
})

transition.on("interrupt", function() {
    var elem = this;
    var targetValue = d3.active(this)
        .attrTween("cx")
        .call(this)(1);
    d3.select(this).attr("cx", targetValue)
})

这是演示:

var svg = d3.select("svg")

var circle = svg.selectAll("circle")
  .data([1, 2, 3, 4, 5, 6, 7, 8])
  .enter()
  .append("circle")
  .attr("cx", 50)
  .attr("cy", function(d) {
    return d * 50
  })
  .attr("r", 20)
  .on("click", function() {
    d3.select(this).interrupt()
  })

circle
  .transition()
  .delay(function(d) {
    return d * 500;
  })
  .duration(function(d) {
    return d * 5000;
  })
  .attr("cx", 460)
  .on("interrupt", function() {
    var elem = this;
    var targetValue = d3.active(this)
      .attrTween("cx")
      .call(this)(1);
    d3.select(this).attr("cx", targetValue)
  })
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="500" height="500"></svg>


PS:不像Andrew's answer , 因为我使用的是 d3.active(node)在这里,点击仅在转换 时有效已开始已经。

关于d3.js - 刷新 d3 v4 过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48383572/

相关文章:

javascript - 无法将值插入数组

html - 使用 "dynamic width"时如何将转换应用于 v-dialog ,这意味着宽度 ="unset"?

javascript - D3 - 更新堆积条形图时遇到问题

CSS 转换 : matrix3d() - After transition, 图像弹回原位而不是缓动?

Jquery slidein 左右多个元素然后再次退出并循环

jquery - d3js rect svg 的过渡高度加载

javascript - Ember 过渡和渲染完成事件

reactjs - 如何在 React Native 中为 setNativeProps 使用 useRef 钩子(Hook)?

javascript - 如何在 D3js 中动态添加图像到圆圈

javascript - mpld3:如何使用插件更改工具栏的位置?