如何加速所有jquery动画?
假设我已经用jQuery启动了一系列动画。如何在不等待的情况下加速这些动画以测试其副作用 换句话说。这个神奇的勾号功能是什么样子的如何加速所有jquery动画?,jquery,unit-testing,time,Jquery,Unit Testing,Time,假设我已经用jQuery启动了一系列动画。如何在不等待的情况下加速这些动画以测试其副作用 换句话说。这个神奇的勾号功能是什么样子的 var el = $('selector'); log(el.css("left")); // 10 el.animate({left:"-=5"}, 1000); log(el.css("left")); // ≈10 jQuery.tick(1000); // accelerate log
var el = $('selector');
log(el.css("left")); // 10
el.animate({left:"-=5"}, 1000);
log(el.css("left")); // ≈10
jQuery.tick(1000); // accelerate
log(el.css("left")); // 5
仅仅模仿setInterval和setTimer似乎还不够
更新
我接受了@jfriend00的答案,将其直接挂钩到jquery的动画速度中(棒极了)。不过,对于单元测试,只需关闭fx引擎就足够了+我为那些答案感到高兴 我认为您必须为每个动画的时间设置一个乘数(可能不是选项)
或者您可以设置
$.fx.off=true代码>(http://api.jquery.com/jQuery.fx.off/)立即看到差异。(你不会看到加速,只是一个瞬间的变化)。我认为你要么必须为每个动画设置一个时间乘数(可能不是一个选项)
或者您可以设置$.fx.off=true代码>(http://api.jquery.com/jQuery.fx.off/)立即看到差异。(你看不到加速,只是一个瞬间的变化)。现有的animate函数所做的第一件事就是调用jQuery.speed()
,对animate()
的各种参数选项进行排序,找出哪个是速度和其他选项。您可以插入该函数并将速度更改为较短的值
jQuery.oldSpeed = jQuery.speed;
jQuery.speed = function() {
var opt = jQuery.oldSpeed.apply(this, arguments);
opt.duration = Math.floor(opt.duration / 10);
return(opt);
}
一旦动画已经开始,这不会改变它,但会缩短所有动画的时间。由于许多其他动画(可能全部)最终都会调用.animate(),因此这也适用于许多其他动画
您可以在此处看到此工作:。按下“加快”按钮后,下一个动画周期将以更快的速度开始。现有动画函数所做的第一件事是调用jQuery.speed()
对各种参数选项进行排序,以animate()
确定哪个是速度和其他选项。您可以插入该函数并将速度更改为较短的值
jQuery.oldSpeed = jQuery.speed;
jQuery.speed = function() {
var opt = jQuery.oldSpeed.apply(this, arguments);
opt.duration = Math.floor(opt.duration / 10);
return(opt);
}
一旦动画已经开始,这不会改变它,但会缩短所有动画的时间。由于许多其他动画(可能全部)最终都会调用.animate(),因此这也适用于许多其他动画
您可以在此处看到此工作:。按下“快走”按钮后,下一个动画周期将以更快的速度开始。或将持续时间缩短到1000分钟以下:) 或者将持续时间缩短到1000分钟以下: 以单元测试为借口,我假设您希望跳过所有动画,但仍保留其预期效果
如果这是您想要的,您可以只设置$.fx.off=true
,这将全局禁用tweening或动画中的所有jQuery动画,但它们仍将转到其逻辑端。由于缺少动画,因此.animate()
与.css()
基本相同
如果您正在寻找更模块化的东西,您可以在元素上调用.stop(bool,bool)
。例如,为第二个参数传入true
,将停止选定元素上当前正在运行的动画,跳到动画的逻辑结尾。以单元测试为借口,我假设您要跳过所有动画,但仍保留其预期效果
如果这是您想要的,您可以只设置$.fx.off=true
,这将全局禁用tweening或动画中的所有jQuery动画,但它们仍将转到其逻辑端。由于缺少动画,因此.animate()
与.css()
基本相同
如果您正在寻找更模块化的东西,您可以在元素上调用.stop(bool,bool)
。例如,为第二个参数传入true
,将停止选定元素上当前正在运行的动画,并跳到动画的逻辑结尾。要求用户翻转:DYou mean,除了使用。停止(false,true)
?要求用户翻转:DYou mean,除了使用。停止(false,true)
?当我关闭fx.off时,动画调用是否同步?当我关闭fx.off时,动画调用是否同步?+1这是一个非常巧妙的解决方案。我应该记下这一点。:D+1这是一个非常巧妙的解决方案。我应该记下这一点。:D