Всем привет, решил немного декорировать код и написал такую замечательную (нерабочую) функцию
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");
}
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задача: Есть три шага в форме, после выбора одного из элементов выбранный шаг, а следующий появляетсяПо клику на элемент нужно отправить его...
Как проверить, во скольких вкладках открыт сайт? Чтобы можно было избежать высокой нагрузки на сервер, если например на сайте каждые пару...
Добрый День! Столкнулся с проблемой, JS никак не может понять стиль и выдает ошибку в consolelog каждый раз
Как сделать так чтобы, если в числе больше двух нулей, то оно отделялось пробелами то есть: 100 < 2 , 1 000 > 2, 1 000 000 > 2 и тд