如何修改这个jQuery缓动函数以产生一个不太夸张的反弹?
$.easing.easeOutElasticSingleBounce = function (x, 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;
};
我正在寻找一个模拟这个的缓动函数:
http://sandbox.scriptiny.com/tinyslider2/
tinyslider2使用类似的功能,如下所示:
new Function(this.n+'.slide('+(i==1?t+(12*d):t+(4*d))+','+(i==1?(-1*d):(-1*d))+','+(i==1?2:3)+','+a+')')
但是我今天似乎无法理解数字,以便将tinyslider2等式纳入jQuery缓动格式。如果有人能给我一个例子,我会非常感激。
更新
这个等式非常接近:
$.easing.custom = function (x, t, b, c, d) {
var s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
}
我只需要在没有开始反弹的情况下结束反弹。
答案 0 :(得分:14)
http://timotheegroleau.com/Flash/experiments/easing_function_generator.htm允许您直观地创建缓动功能。如果您切换右上角的F5 / FMX单选按钮,它会以JavaScript形式输出。
如果不知道完全你想要的效果,这应该会让你非常接近。
$.easing.tinyslider = function(x, t, b, c, d) {
ts=(t/=d)*t;
tc=ts*t;
return b+c*(-8.1525*tc*ts + 28.5075*ts*ts + -35.105*tc + 16*ts + -0.25*t);
}
否则,请使用缓动函数生成器并尝试新选项或查找http://commadot.com/jquery/easing.php以获取更多资源。
这很有趣,我总是想知道这些缓和功能是如何运作的。
答案 1 :(得分:3)
您是否尝试过jQuery easing plugin?
它添加了许多新的缓和(你可以在网站上试试)。
如果您可以使用优雅降级,我建议您查看CSS transitions。它是硬件加速的,您可以使用预定义或自定义(具有贝塞尔曲线)过渡。
答案 2 :(得分:2)
我知道这很老了,但我需要做出完全相同的效果,并且我在UI中使用了两个缓动函数的组合非常成功。
在'时间'的95%时为95%的过渡的线性动画,然后在'时间'的5%的时间内对剩余的5%进行弹性动画16(这看起来似乎是正确的 - 很多这个效果的动画时间专门用于弹跳所以它需要相当长的时间。)
d = [transition 'distance' or whatever];
t = [transition time ms]
da = d * 0.95;
db = d * 0.05;
ta = t * 0.95;
tb = (t * 0.05) * 16;
var anima = {left: "+="+da+"px"};
var animb = {left: "+="+db+"px"};
$(element).animate(anima,ta).animate(animb,tb);
相当多的解决方法,但我无法创建一个bezier公式,我正在试着撕裂我的头发。