Это своего рода математическая проблема. Я хочу уволить определенное число setTimeout
(число основано на массиве ) в течение определенного периода времени (скажем, 5 секунд).Простое время между увольнением определенного количества таймаутов за определенный период времени
Первый setTimeout
должен начинаться с 0 sec.
, а последний - 5 sec.
. Все таймауты между ними должны начинаться с эффекта ease-in
, чтобы каждый таймаут начинался быстрее.
Есть пример, который иллюстрирует то, что я хочу достичь именно.
Я изо всех сил вокруг этой линии:
next += timePeriod/3.52/(i+1);
, который работает почти идеально в демонстрационном примере (для любого timePeriod
), но очевидно, что он не работает для другого letters.length
, как я использовал статический номер 3.52
.
Как рассчитать next
?
var letters = [
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T'
];
var div = $('#container');
var timePeriod = 5000; // 5 seconds;
var perLetter = timePeriod/(letters.length-1); // it gives equal time between letters
var next = 0;
for(var i=0; i<letters.length; i++){
setTimeout(function(letter){
//div.append('<span class="letter">' + letter + '</span>');
// Used "|" instead of letter, For better redability:
div.append('<span class="letter">|</span>');
}, next, letters[i]);
// Can't find the logic here:
next += timePeriod/3.52/(i+1);
};
///////////////// FOR DEMO: ///////////////
var sec = timePeriod/1000;
var secondsInterval = setInterval(seconds, 1000);
var demoInterval = setInterval(function(){
sec >= 0 || clearInterval(demoInterval);
div.append('\'');
}, 30);
function seconds(){
sec || clearInterval(secondsInterval);
$('#sec').text(sec-- || 'DONE');
}
seconds();
.letter{
color : red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id=container></span>
<span id=sec class=letter></span>
Спасибо за ссылку –