Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何加速所有jquery动画?_Jquery_Unit Testing_Time - Fatal编程技术网

如何加速所有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

假设我已经用jQuery启动了一系列动画。如何在不等待的情况下加速这些动画以测试其副作用

换句话说。这个神奇的勾号功能是什么样子的

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