Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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
Javascript 运行有限周期动画的更好方法_Javascript_Jquery_Css Transitions - Fatal编程技术网

Javascript 运行有限周期动画的更好方法

Javascript 运行有限周期动画的更好方法,javascript,jquery,css-transitions,Javascript,Jquery,Css Transitions,首先,尽管它是丑陋的,但无论出于何种意图和目的,它都是有效的。然而,它真的让我既恶心又疯狂 对于懒惰的人来说,代码中最糟糕的部分是: setTimeout(function() { toggle(); //off setTimeout(function() { toggle(); //on setTimeout(function() { toggle(); //off setTimeout(funct

首先,尽管它是丑陋的,但无论出于何种意图和目的,它都是有效的。然而,它真的让我既恶心又疯狂

对于懒惰的人来说,代码中最糟糕的部分是:

setTimeout(function() {
    toggle(); //off
    setTimeout(function() {
        toggle(); //on
        setTimeout(function() {
            toggle(); //off
            setTimeout(function() {
                toggle(); //on, stays for stallTime
                setTimeout(function() {
                    toggle(); //off
                    callback();
                }, stallTime);
            }, 300);
        }, 300);
    }, 300);
}, 300);
当然,我喜欢通过改变元素上的CSS类来控制我的动画。然而,transitionend和WebKittTransitionEnd等都是不可靠的。我是不是被迫求助于这种可怕的密码?理想情况下,我希望能够设置一个可变数量的闪光灯,但这段代码太单调了

请把我从污秽中解救出来

为了避免setInterval,我编写了一个递归函数:

var count = 5;
var i = setInterval(function() {
    toggle();
    count--;
    if(count == 0) {
        clearInterval(i);
        callback();
    }
}, 300);
// link.addClass('hover'); //on - no longer needed

flash = function(count) {
    if (count > 1) {
        setTimeout(function() {        
            toggle();
            flash(count - 1);
        }, 300);
    } else {
        setTimeout(function() {
            toggle(); //off
            callback();
        }, stallTime);            
    }                
}

flash(6); // 2 * the number of flashes.
为了避免setInterval,我编写了一个递归函数:

// link.addClass('hover'); //on - no longer needed

flash = function(count) {
    if (count > 1) {
        setTimeout(function() {        
            toggle();
            flash(count - 1);
        }, 300);
    } else {
        setTimeout(function() {
            toggle(); //off
            callback();
        }, stallTime);            
    }                
}

flash(6); // 2 * the number of flashes.


为什么不改为设置一个循环来执行此操作…?因为它需要计时,css正在控制转换计时。一个循环只会在没有等待的情况下启动它很多次。如果你做了这样的事情,那就不是免费的,不必要的,而且有点滑稽了。您熟悉Common.js延迟对象吗?jQuery有它们和子集承诺。过来看。有趣的是,延迟对象/承诺/未来这一特定模式今天不断出现。是的,我对延迟很熟悉。问题是,这是一个需要超时或间隔的计时问题。为什么不设置一个循环来执行此操作…?因为它需要计时,css正在控制转换计时。一个循环只会在没有等待的情况下启动它很多次。如果你做了这样的事情,那就不是免费的,不必要的,而且有点滑稽了。您熟悉Common.js延迟对象吗?jQuery有它们和子集承诺。过来看。有趣的是,延迟对象/承诺/未来这一特定模式今天不断出现。是的,我对延迟很熟悉。问题是,这是一个需要超时或间隔的计时问题。太棒了。这是一个显而易见的答案,我应该知道。我把责任归咎于假期。非常感谢。但尼罗河较短我也推荐它,因为它不使用间隔。您也可以使用递归函数。使用间隔有问题吗?谢谢。第一个环节很有启发性。第二个链接似乎是由误解Javascript中变量操作的基本概念的人编写的,因此没有太大帮助明亮的这是一个显而易见的答案,我应该知道。我把责任归咎于假期。非常感谢。但尼罗河较短我也推荐它,因为它不使用间隔。您也可以使用递归函数。使用间隔有问题吗?谢谢。第一个环节很有启发性。第二个链接似乎是由误解Javascript中变量操作的基本概念的人编写的,因此没有太大帮助@JaredFarrish不。。。卡博特的密码和黑暗精灵的密码不一样。如果DarkFelcon也这么做,他还需要两个setInterval或一个setInterval和一个setTimeout。卡博特所做的只是让它完全符合OP最初的要求。黑暗精灵没有,如果你仔细看的话。在接受的答案中没有暂停计时器。@Nile-我认为您不需要两个单独的设置计时器来完成这项工作。有什么东西可以帮我看看我遗漏了什么吗?没有两个设置超时同时运行。那么…?@JaredFarrish类似的东西只需要一次超时就可以做同样的事情。另外,如果你不想把全球网络搞得乱七八糟的话scope@Nile-这是一个单独的setTimeout被用于。我不知道为什么,但我可以坐上几个小时,摆弄调用setTimeout的模糊方式。不过,这只是代码的结构问题,正如我在问题下方的评论中所说,它既可笑又荒谬。@JaredFarrish我不确定您是否在质疑setTimeout的用法并暗示setInterval更合适here@JaredFarrish不卡博特的密码和黑暗精灵的密码不一样。如果DarkFelcon也这么做,他还需要两个setInterval或一个setInterval和一个setTimeout。卡博特所做的只是让它完全符合OP最初的要求。黑暗精灵没有,如果你仔细看的话。在接受的答案中没有暂停计时器。@Nile-我认为您不需要两个单独的设置计时器来完成这项工作。有什么东西可以帮我看看我遗漏了什么吗?没有两个设置超时同时运行。那么…?@JaredFarrish类似的东西只需要一次超时就可以做同样的事情。另外,如果你不想把全球网络搞得乱七八糟的话scope@Nile-这是一个单独的setTimeout被用于。我不知道为什么,但我可以坐上几个小时,摆弄调用setTimeout的模糊方式。不过,这只是代码的结构问题,正如我在问题下方的评论中所说,它既可笑又荒谬。@JaredFarrish我不确定您是否质疑setTimeout的用法,并暗示setInterval在这里更合适