// t: current time, b: begInnIng value, c: change In value, d: duration
def: 'easeOutQuad',
swing: function (x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInQuad: function (x, t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
我正试图将robertpenner的Easing函数转换成python,结果卡住了! 以前有人帮过忙吗?在
https://github.com/danro/jquery-easing/blob/master/jquery.easing.js
在JavaScript和Python中,
/=
是一个“增强赋值”操作符,其含义几乎相同。在在JS中:
…相当于:
^{pr2}$在Python中:
……同样相当于(不完全相同,但对于数字来说足够接近):
然而,有一个非常大的区别。在
在JavaScript中,赋值是一个表达式,它有一个值,这个值就是被赋值给变量的值。所以:
…大致相当于:
在Python中,赋值是一个语句。它没有值,不能在表达式中使用。所以:
…引发一个
SyntaxError
。在移植在表达式中间使用赋值(增强或其他方式)的代码通常需要将表达式分解成多行和/或找到重写表达式的方法,使其不需要任何赋值。(但通常情况下,这并不是坏事,因为最初的表达式无论如何都不太可读……)
例如,假设JS从左到右计算操作数(我不确定这是肯定的?)公司名称:
一般来说,您可以这样做:
然后用
t/=d
替换之前t
的任何实例,并将t/=d
中的所有实例保留为单独的。幸运的是,我们不需要以前的东西。在如果你仔细想想,你可以很容易地得到同样的效果,而不需要改变
t
,在一行中,更容易阅读,通过以下任何一种方式:用C语言思考的人会立刻抱怨这些都“太慢了”。毕竟,第一个做了一个额外的除法,第二个做了求幂而不是乘法,第三个做了两个乘法而不是一个。恐怖!在
当然,您可以始终使用临时变量:
…但是,对于一个C程序员来说,这意味着您正在使用一个有价值的寄存器。当然,在1985年之后编写的每一个编译器都会在}是死的,并重用同一个寄存器,但是如果可以的话,为什么不强制它重用寄存器,特别是如果它还保存了一些击键操作呢?在
t_over_d
出现时检测到{在JS或Python中,乘法的开销只是调用函数和解释字节码等开销的一小部分,以至于您根本不会注意到。同时,重新绑定一个局部变量(尤其是在V8风格或PyPy风格的JIT解释器中)的成本可能比传递一个未命名的临时结果的成本高得多。在
因此,这是一个错误的“优化”范例,它使代码更难理解,同时可能会使代码变慢而不是加速,而且在一个无论如何都不可能成为值得优化的瓶颈的领域。在
因为gnibbler提出了JavaScript是否真的能保证这个求值顺序的问题
首先,JavaScript被定义为“Firefox做什么”(和“Spidermonkey做什么”),但这应该是同一件事,如果不是,那么JavaScript可以做两件事,所以这是两倍的好,对吗。但是ECMAScript是由标准定义的,每个JS实现(不管名字是什么)都只是口头上说说而已,我们可以假设ECMAScript 5.1是所有实现都遵循的标准(只要“所有实现”都意味着“Opera”),这是真的。你可以找到它here。在
因此,在es5.1中:11.5乘法运算符保证}的值。(你必须仔细阅读“evaluate”是什么意思,什么是
(t/=d)
的结果将在t
之前被计算,11.13.2复合赋值保证了对t/=d
的求值将在完成之前设置{GetValue
和SetValue
意思是说,但我很肯定这是有保证的。)/=
是一个扩充赋值运算符。t /= d
与{+=
、-=
、和{好吧,它是一个简单的运算符,就像
+=
一样,但不是加法除法。这是长表格相关问题 更多 >
编程相关推荐