D3.js 参数化D3中的反弹减缓效果
在下图中,黑线描述了反弹功能,如中所示。有没有办法使反弹变小,如红线所示D3.js 参数化D3中的反弹减缓效果,d3.js,easing,bounce,D3.js,Easing,Bounce,在下图中,黑线描述了反弹功能,如中所示。有没有办法使反弹变小,如红线所示 没有任何本地方法可以改变这种特定的缓和方法 但是,如果查看,您将看到反弹步骤是硬编码的: var b1 = 4 / 11, b2 = 6 / 11, b3 = 8 / 11, b4 = 3 / 4, b5 = 9 / 11, b6 = 10 / 11, b7 = 15 / 16, b8 = 21 / 22, b9 = 63 / 64, b0 = 1 /
没有任何本地方法可以改变这种特定的缓和方法 但是,如果查看,您将看到反弹步骤是硬编码的:
var b1 = 4 / 11,
b2 = 6 / 11,
b3 = 8 / 11,
b4 = 3 / 4,
b5 = 9 / 11,
b6 = 10 / 11,
b7 = 15 / 16,
b8 = 21 / 22,
b9 = 63 / 64,
b0 = 1 / b1 / b1;
因此,您可以轻松地使用不同的值集创建自定义缓和
仅供比较,以下是D3版本:
d3.1选择SVG
A.附加圆
attrr先生,20岁
.20岁
.自然减员,50
过渡
1.轻松地;轻松地
.期限2000
.128,280;
以下代码是我在bl.ocks.org上Mike Bostock的一个页面上找到的,它正是我想要的,描述了一个参数化的反弹: 它定义了以下功能:
function bounce(h) {
if (!arguments.length) h = 0.25;
var b0 = 1 - h,
b1 = b0 * (1 - b0) + b0,
b2 = b0 * (1 - b1) + b1,
x0 = 2 * Math.sqrt(h),
x1 = x0 * Math.sqrt(h),
x2 = x1 * Math.sqrt(h),
t0 = 1 / (1 + x0 + x1 + x2),
t1 = t0 + t0 * x0,
t2 = t1 + t0 * x1,
m0 = t0 + t0 * x0 / 2,
m1 = t1 + t0 * x1 / 2,
m2 = t2 + t0 * x2 / 2,
a = 1 / (t0 * t0);
return function(t) {
return t >= 1 ? 1
: t < t0 ? a * t * t
: t < t1 ? a * (t -= m0) * t + b0
: t < t2 ? a * (t -= m1) * t + b1
: a * (t -= m2) * t + b2;
};
}
在精神上,我想到了一些类似的东西,但不记得为什么我没有发布它;-看到它在运行,我想知道为什么它在结尾看起来如此紧张,更像是猛烈的驱动然后是弹性的反弹…@altocumulus它的紧张可能是因为我在几分钟内更改了值和三元运算符,而没有对它进行更深入的关注。正如我所说,更好的数学在这里是必要的,这只是为了展示一个解决方案。
d3element.transition()
.duration(1500)
.ease(bounce(0.2))
...omissis...