D3js-2条路径之间的平滑过渡
D3js - Smooth transition between 2 paths
我是两个非常不同的路径,我想平滑地更改其中一个,使其看起来像另一个。我尝试过在"d"属性上使用.transition()方法,但结果非常糟糕。
以下是一个示例:http://jsfiddle.net/yya0m0s0/1/
我使用的d3代码如下:
var svg = d3.select("body")
.append('svg')
.attr('width', '375px')
.attr('height', '490px');
svg.append('path').attr('d', d_t0);
svg.selectAll('path').transition()
.duration(3500).delay(1000)
.attr('d', d);
创建这种转换的最佳方式是什么?
非常感谢
这里的问题是第一条路径只有10个段,第二条路径有42个段。路径是如此的不同,以至于使用内置的路径tweening在它们之间转换是不可能的。
D3很好地对结构相似的两条路径(相同数量的段和相同类型的段)进行了粗化。结构越是不同,事情就开始变得越混乱。
考虑这个例子。
前两个路径数据d_1
和d_2
具有相同数量和类型的段,只是端点改变。两者之间的过渡是无缝的。
后两个路径数据d_3
和d_4
具有相同数量的分段,但最终分段是不同类型的(d_3
中的直线,d_4
中的二次曲线)。从所有点到最后一点的过渡都很好,但最后一段会显示出与示例中相同的跳跃。这是因为二次曲线需要一个控制点,当过渡开始时,控制点必须凭空实现,从而导致跳跃。
坏消息是,解决这个问题的唯一方法是为路径数据属性创建一个自定义的tween函数。好消息是,这是一个常见的问题,聪明的人已经想出了坚实的解决方案。
HERE是Mike Bostock创建的函数之间的良好路径。
当在您的示例中实现时,它会给出相当平滑的结果:JSFiddle
希望能有所帮助。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- Html页面上的多个Base64图像和平滑加载
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在浏览器之间平滑滚动
- 一种在指定时间后更改的背景图像之间添加更平滑过渡的简单方法
- D3js-2条路径之间的平滑过渡
- 有没有一种方法可以使用lightbox2实现图像之间更平滑的过渡?
- 使用jQuery在改变图像之间添加平滑度
- 两个独立的html文件之间的平滑滑动过渡
- 使用Jquery绘制html元素之间的平滑线
- 元素之间的平滑过渡
- 锚点之间的垂直和水平平滑滚动
- 如何使图像之间的过渡平滑
- 使用jquery重定向时,页面之间的平滑过渡
- 如何在新旧目标位置之间平滑地平移