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在这里更合适