snap.svg mina 缓动参数不起作用

snap.svg mina easing parameter not working

在 snap svg 文档中,所有 mina.* 缓动都有一个可用的参数 n (ie bounce),但是当传递除零以外的任何内容时它会出错,而传递零基本上会消除缓动效果。我希望如果通过零将其删除,此参数会影响缓动的强度,但也许零只是作为它的假?我错过了什么吗?

下面是一个例子:

/* Timeouts are set just to show all three running */

var s = Snap("#svg");


var rect = s.rect(10, 10, 100, 100);

//Works without parameter

rect.animate({
    x: 50,
    y: 50
}, 800, mina.bounce)


setTimeout(function(){
  
//  
//Works with parameter as 0
//
rect.animate({
    x: 0,
    y: 0
}, 800, mina.bounce(0));
  
  
},1000)


setTimeout(function(){
  
//
// Doesnt Work 
//
rect.animate({
    x: 50,
    y: 50
}, 800, mina.bounce(1));
  
  
},2000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.4.1/snap.svg-min.js"></script>

<svg id="svg" version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>

谢谢!

这并不像你想象的那样有效。

当您调用动画时,您将缓动函数作为参数传递。该函数将采用一个参数 'when its called'(即不是在它通过时),它将是动画在其持续时间内的 0-1 之间的插值数。所以在动画开始时它将是 0,然后是 0.01,然后在结束时是 1。该函数决定了结果将如何变化,并且 return 当前反弹的值取决于当前输入值(0-1 通过动画的距离)。

在您的示例中,您不再传递函数 mina.bounce,而是传递函数 mina.bounce(0) 的结果(这是一个数字,而不是函数) , 所以什么都不会发生。

如果您想要不同的缓动效果(除了包含的缓动效果),您需要编写自己的函数并将其作为参数传递给动画(您可以添加第二个参数来指定某些特征,例如强度反弹,然后将其作为绑定传递给函数)。您可以查看 mina.bounce 函数并根据您的需要对其进行定制(您可以复制它并仅更改您在 bounce 函数中看到的几个值,但它们有点繁琐)。

您可以在文件末尾附近看到示例缓动函数 here