人。它是一个计时器。我想运行计时器,当它结束时做其他事情(如警告),然后再用其他时间运行。但我不能总是只执行第二次调用:
$(document).ready(function() {
timer(5,timer(25));
// timer(5);
// timer(25); do not work... only exec de last one
});
function timer(countTo,callback){
var time = 10; /* how long the timer runs for */
var initialOffset = '440';
var i = 1
var interval = setInterval(function() {
$('.circle_animation').css('stroke-dashoffset', initialOffset-(i*(initialOffset/countTo)));
$('h2').text(i);
if (i == countTo) {
clearInterval(interval);
}
i++;
}, 1000);
callback();
}

哪种解决方案最好?有些东西我不理解......无论如何,谢谢!
答案 0 :(得分:1)
嗯,先关闭:
timer(5,timer(25));
如果您认为此行会执行timer(5)
,然后在timer(5)
结束时执行timer(25)
,那么您就错了。这实际上是立即评估timer(25)
,并将其返回值(undefined
)作为第二个参数传递给timer(5,undefined)
。
如果您打算将其作为回调传递,则需要传递一个函数。所以你可以这样做:
timer(5,timer.bind(null,25));
但是,就此而言,在尝试调用它之前,你甚至都没有检查callback
是否存在,所以你可能无论如何都会收到引用错误。
答案 1 :(得分:0)
这是你想要的吗?
timer(5,function(){timer(25)});
答案 2 :(得分:0)
timer(5,timer(25));
启动两个计时器并将第二个结果( undefined )传递给第一个作为回调。你想要:
timer(5,timer.bind(window,25));
如果 i == countTo ...
,则需要执行回调答案 3 :(得分:0)
你的问题在这里:
freqs=c(0.7, 0.2, 0.05, 0.01, 0.001)
x=0:(length(freqs)-1)
df=data.frame(x=x, y=freqs)
library("ggplot2")
ggplot(df) +
geom_bar(mapping = aes(x = x, y = y),stat = "identity")+ scale_y_log10()
您应该输入
timer(5,timer(25));
因为timer(5, function(){
timer(25)
});
//or using ES6 syntax
timer(5, () => timer(25));
返回其值(此函数不返回值,因此它尝试调用undefined),而不是该函数。
另请阅读有关闭包的信息,这可能会有所帮助。
答案 4 :(得分:0)
您需要运行本身(callback()
)功能,而不是运行timer()
。您还需要在函数内运行for
循环,以检查函数已运行的次数。如果它达到你想要的最大值,那就突破了。这样它就无法无限期地运行。
在下面的示例中,timer()
函数执行五次,这是我通过调用timer(5)
所假设的。
$(document).ready(function() {
timer(5);
});
function timer(countTo) {
for (var iterations = 0; iterations < countTo; iterations++) {
var time = 10; /* how long the timer runs for */
var initialOffset = '440';
var i = 1
var interval = setInterval(function() {
$('.circle_animation').css('stroke-dashoffset', initialOffset - (i * (initialOffset / countTo)));
$('h2').text(i);
if (i == countTo) {
clearInterval(interval);
}
}, 1000);
timer();
console.log("Iteration:", iterations + 1);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
要在此之后运行该功能25次,您只需在timer(25)
之后直接致电timer(5)
:
$(document).ready(function() {
timer(5);
timer(25);
});
$(document).ready(function() {
timer(5);
timer(25);
});
function timer(countTo) {
for (var iterations = 0; iterations < countTo; iterations++) {
var time = 10; /* how long the timer runs for */
var initialOffset = '440';
var i = 1
var interval = setInterval(function() {
$('.circle_animation').css('stroke-dashoffset', initialOffset - (i * (initialOffset / countTo)));
$('h2').text(i);
if (i == countTo) {
clearInterval(interval);
}
}, 1000);
timer();
console.log("Iteration:", iterations + 1);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
希望这有帮助! :)