自定义jQuery函数

自定义jQuery函数,jquery,jquery-easing,easing-functions,Jquery,Jquery Easing,Easing Functions,我有一个在jQuery控制下的侧面滚动网站,有几个页面,水平方向上相隔数千像素。我使用的是easeOutElastic函数,但动画速度太快,弹性反弹需要减弱。如果增加“持续时间”参数,动画会变慢,但反弹也会变慢。持续时间似乎控制着整个动画 我需要做的是分别控制移动的速度和弹性的松紧度。我一直在一个插件中摆弄我自己的easeOutElastic函数副本,但我似乎无法正确使用它,不知道所有参数是什么: easeOutElastic: function (x, t, b, c, d) { va

我有一个在jQuery控制下的侧面滚动网站,有几个页面,水平方向上相隔数千像素。我使用的是easeOutElastic函数,但动画速度太快,弹性反弹需要减弱。如果增加“持续时间”参数,动画会变慢,但反弹也会变慢。持续时间似乎控制着整个动画

我需要做的是分别控制移动的速度和弹性的松紧度。我一直在一个插件中摆弄我自己的easeOutElastic函数副本,但我似乎无法正确使用它,不知道所有参数是什么:

easeOutElastic: 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;
}
看起来当t==0时,缓和函数完成了,但我真正需要的是当运动速度低于某个阈值时函数返回,而不是等待时间结束。但速度在哪里计算?s


任何帮助你可以给破译这将是伟大的

我可以提出一个解决方案吗?使用两个动画调用,一个用于移动元素的大部分距离,另一个用于最终反弹效果。通过这种方式,您可以更改反弹效果的持续时间,使其看起来像您想要的那样,并使水平滚动运动像您想要的那样快

$('#element_id').animate({left : '20px'}, 1000, 'linear', function () {
    $(this).animate({left : '0px'}, 500, 'easeOutElastic');
});
有人能告诉我参数x,t,b,c,d代表什么吗

x=null额外参数,不需要用于公式,但对于jQuery是必需的 t=当前时间 b=起始值 c=最终值 d=持续时间

资料来源:

速度在哪里计算

速度定义为随时间变化的距离。方程可以用曲线表示。曲线已经包含了任何给定时刻的位置信息,因此速度不是您输入的参数,而是函数的输出

速度也是不断变化的加速度定义为速度随时间的变化。对这条方程曲线来说,最重要的是在何时何地放置一些东西。。。这最终是一个动画表示输出,包含无限多的速度或更准确地说,加速度

你也可能对我的答案感兴趣

编辑:

我认为你在处理这个方程时遇到了困难,因为它需要以图形化的方式而不是程序化的方式可视化。这个在线工具使它变得简单。只需精确地绘制曲线,预览它,然后输出自定义函数

你必须点击微小的图像,工具就会弹出


明亮的我已经试过了。昨晚没有睡觉,所以我的大脑在寻找复杂的解决方案。是的,我意识到速度是在函数中隐式处理的。谢谢@Gordon,更新了我的答案,添加了一个在线工具的链接,该工具可以根据曲线创建任何缓和功能。感谢jquery工具链接。我认为代码不能正常工作,但它很适合检查动画,你可能会喜欢这篇文章。。
$('#element_id').animate({left : '20px'}, 1000, 'linear', function () {
    $(this).animate({left : '0px'}, 500, 'easeOutElastic');
});