Всем привет, решил немного декорировать код и написал такую замечательную (нерабочую) функцию
function interval(o){
var i = 0,
count = o.count || 1,
timeout = o.timeout || 1000,
start = o.startFunc || function(){},
end = o.endFunc || function(){};
var timer = setTimeout(function tick(){
i++;
if(i < count){
start(i);
setTimeout(tick, timeout);
} else{
clearTimeout(timer);
end();
}
}, timeout);
}
Вот попытка её запустить:
interval({
count: 100,
timeout: function(){return getRandomInt(5, 15)*10;},
startFunc: function(count){
$('#analyze').width(count+'%');
$('#analyze-text > span').text(count+'%');
},
endFunc: function(){
$('#computing').css('display', 'none');
$('#finish-screen').fadeIn(600);
}
});
Проблема в том, что setTimeout() не срабатывает. Скажите, почему?
Разобрался. Дело в том, что мне действительно нужно передать функцию в переменную timeout, но при использовании функции setTimeout() вторым аргументом я передал лишь ссылку на функцию, в то время как ожидал, что она выполнится. Вот рабочий вариант.
function interval(o){
var i = 0,
count = o.count || 1,
timeout = o.timeout || 1000,
start = o.start || function(){},
end = o.end || function(){};
function tick(){
i++;
if(typeof(o.timeout) == 'function'){
timeout = o.timeout();
}
if(i <= count){
start(i);
setTimeout(tick, timeout);
} else{
end();
}
}
setTimeout(tick, timeout);
}
Обрати внимание на func tick
function interval(o) {
var i = 0;
var count = o.count || 1;
var timeout = o.timeout || 1000;
var start = o.startFunc || function() {};
var end = o.endFunc || function() {};
function tick() {
i++;
if (i < count) {
start(i);
setTimeout(tick, timeout);
} else {
clearTimeout(timer);
end();
}
}
var timer = setTimeout(tick, timeout);
}
interval({
count: 100,
timeout: function() { return getRandomInt(5, 15) * 10 },
startFunc: function(count) {
console.log("startFunc");
},
endFunc: function() {
console.log("endFunc");
}
});
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости