2015-09-17 25 views
1
// t: current time, b: beginning value, c: change in value, d: duration 
function easeInQuad(t, b, c, d) { 
    return c*(t/=d)*t + b; 
} 
function easeOutElastic(t, b, c, d) { 
    var s = 1.70158; 
    var p = 0; 
    var a = c; 
    if (t == 0) return b; 
    if ((t /= d) == 1) return b + c; 
    if (!p) p = d * .3; 
    if (a < Math.abs(c)) { 
     a = c; 
     var s = p/4; 
    } else var s = p/(2 * Math.PI) * Math.asin(c/a); 
    return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI)/p) + c + b; 
} 

easeInQuad(100, 20, 0, 1000) // 20 
easeInQuad(500, 20, 0, 1000) // 20 

easeOutElastic(0, 20, 0, 1000) // 20 
easeOutElastic(500, 20, 0, 1000) // NaN 
easeOutElastic(1000, 20, 0, 1000) // 20 

如果價值變動爲0,easeInQuad總是返回20,easeOutElastic也返回錯誤值。在JavaScript緩解作用 - 在設定值更改爲0

值的變化不能爲0? jQuery如何處理animate({top: 0}),設置0到0.0001?


我誤解了什麼價值意義變化。如果我想最終值是0,參數c應該是-20

+0

您是否需要其他任何東西,或者我們能否接受我的答案並將其關閉? – ductiletoaster

回答

2

對於easeInQuad

easeInQuad(100, 20, 0, 1000) 

以下執行,我得到20,因爲0在大多數公式的乘法。

0*(100/=1000)*100 + 20 = 20 

看過其他緩動公式後,我認爲這是預期的行爲。請參閱jQuery源代碼here

進一步的測試表明,將0更改爲1將產生20.01以上的版本,並且此趨勢會繼續。我再次認爲這是預期的行爲。

+0

謝謝。我誤解了價值意義上的變化。如果我想結束值爲0,參數c應爲-20。 – Cople

+0

是的,這是有道理的。 jQuery源文件在他們如何處理這個問題上有一些很好的例子...我在我的答案中添加了一個鏈接,你應該檢查一下! – ductiletoaster

+0

最後,除非你需要別的什麼,你會介意接受我的答案嗎? :) – ductiletoaster