Javascript 如何在前面的结束后执行函数?
伙计们。是计时器。我想运行计时器,当它结束时做一些其他的事情(比如警告),然后用其他时间再次运行。但我不能总是只执行第二个调用:Javascript 如何在前面的结束后执行函数?,javascript,jquery,timer,Javascript,Jquery,Timer,伙计们。是计时器。我想运行计时器,当它结束时做一些其他的事情(比如警告),然后用其他时间再次运行。但我不能总是只执行第二个调用: $(文档).ready(函数(){ 定时器(5,定时器(25)); //定时器(5); //计时器(25);不工作…仅执行最后一个 }); 函数计时器(计数、回调){ var time=10;/*计时器运行的时间*/ var initialOffset='440'; 变量i=1 var interval=setInterval(函数(){ $('.circle_an
$(文档).ready(函数(){
定时器(5,定时器(25));
//定时器(5);
//计时器(25);不工作…仅执行最后一个
});
函数计时器(计数、回调){
var time=10;/*计时器运行的时间*/
var initialOffset='440';
变量i=1
var interval=setInterval(函数(){
$('.circle_animation').css('stroke-dashoffset',initialOffset-(i*(initialOffset/countTo));
$('h2')。文本(i);
如果(i==countTo){
间隔时间;
}
i++;
}, 1000);
回调();
}
这就是你想要的吗
timer(5,function(){timer(25)});
启动两个计时器,并将第二个(未定义)的结果作为回调传递给第一个。你想要:
timer(5,timer.bind(window,25));
如果i==countTo…,则需要执行回调。首先:
timer(5,timer(25));
如果您认为此行将执行timer(5)
,然后在timer(5)
末尾执行timer(25)
,则您错了。这实际上将立即计算计时器(25)
,并将其返回值(未定义
)作为第二个参数传递给计时器(5,未定义)
如果要将其作为回调传递,则需要传递一个函数。所以你可以做:
timer(5,timer.bind(null,25));
但是,就这一点而言,在尝试调用回调之前,您甚至不检查它是否存在,因此您可能会得到一个引用错误。您的问题在于:
timer(5,timer(25));
你应该打字
timer(5, function(){
timer(25)
});
//or using ES6 syntax
timer(5, () => timer(25));
因为timer(25)
返回其值(此函数不返回值,因此它尝试调用未定义的),而不是该函数。
另外,请阅读闭包,它可能会有所帮助。您需要运行函数本身(
timer()
),而不是运行回调()
)。您还需要在函数中运行for
循环,检查函数已经运行了多少次。如果它达到你想要的最大值,打破它。这样它就不会无限期地运行
在下面的示例中,timer()
函数执行五次,我假设您需要调用timer(5)
$(文档).ready(函数(){
定时器(5);
});
功能计时器(倒计时){
对于(var迭代次数=0;迭代次数
非常感谢!我会用它!令人惊叹的!很高兴听到这个解决方案似乎对您有所帮助。一旦您确认此解决方案解决了您的问题,请不要忘记通过单击投票按钮下方的灰色复选框将此解决方案标记为正确,这会将其从“未回答问题”队列中删除,并为提问者和回答问题者授予声誉。当然,在这样说的时候,您没有义务将我的答案(或任何其他答案)标记为正确,尽管这确实有助于保持StackOverflow上的事情顺利进行:)这将递归地启动Interval,这只是因为timer()导致countTo未定义,所以for循环将永远不会运行。如果你做了类似计时器(5)的事情,它会崩溃=>所以不,这不是答案
timer(5, function(){
timer(25)
});
//or using ES6 syntax
timer(5, () => timer(25));