首页 > 解决方案 > Javascript Easing 无法正常工作 - EaseInCirc?

问题描述

在 Photoshop 脚本中使用 Javascript,我希望将 X 层的不透明度从不透明度 0 更改为不透明度 100,但我相信以逐渐/缓慢到最后加速的方式,例如“EaseInCirc”。

我正在使用的代码(不成功)是:https ://jsfiddle.net/09onhmy7/

numberOfLayers = 20;
myOpacity = 0;
x=0;
for(i = 0 ; i < numberOfLayers ; i++){
    myIncrements = EaseExpo(i, 1, x, numberOfLayers);
    x = myIncrements + myIncrements;
    myOpacity = myOpacity + parseInt(myIncrements,10); 
    if (myOpacity > 100) {myOpacity = 100 ;} 
    document.write(myOpacity+",");
}

我在网上找到了 EaseExpo(EaseInCirc) 代码(http://gizma.com/easing/):

// t = current time
// b = start value
// c = change in value
// d = duration
// (t and d) can be frames

function EaseExpo(t, b, c, d) {
  //EaseInCirc
    return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
}

…但到目前为止,代码返回的值不会按预期从 0 到 100 分布——而且很可能永远不会,因为我不知道如何转置它们以适应 0 到 100 的范围。

基本上,我试图创建一个从 0 - X 的值的迭代(不是线性的)来表示缓慢上升到最大速度的变化率(我很确定它是一个平方根图/函数?)我正在尝试复制。

将输入的值总是从 0 开始,但最大值可以是任何值。 诀窍是,我需要能够始终将最终值转换为 0-100 的结果。

e.g. A) 40 values = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,34,36,39,42,46,51,58,68,83,100

e.g. B) 18 values = 1,3,5,7,9,11,13,15,17,20,23,27,32,39,49,64,88,100

我一生都无法弄清楚如何去做——或者我应该使用不同的数学来实现我想要的吗?非常感谢,李维

标签: javascriptphotoshop-scripteasing

解决方案


推荐阅读