javascript - Ease time between firing specific number of timeouts in a specific period of time -
it's kind of math problem. want fire specific number of settimeout
(the number based on array length) in specific period of time (say, 5 seconds).
the first settimeout
should start @ 0 sec.
, last @ 5 sec.
. timeouts between should start ease-in
effect, each timeout starts faster.
there's example ilustrates want achieve exactly.
i'm struggling around line:
next += timeperiod/3.52/(i+1);
which works perfect in demo example (for timeperiod
), doesn't work different letters.length
have used static number 3.52
.
how calculate 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); // 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, better redability: div.append('<span class="letter">|</span>'); }, next, letters[i]); // can't find logic here: next += timeperiod/3.52/(i+1); }; ///////////////// 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>
var steps = letters.length; var target = timeperiod; function easeoutquad(t, b, c, d) { t /= d; return -c * t*(t-2) + b; }; var arrayoftimeouts = new array(steps); var n; var prev = 0; for(var = 1; <= steps; i++){ n = easeoutquad(i, 0.0, target, steps); arrayoftimeouts[i-1] = n-prev; prev = n; }
this 1 should work input value.
note graph appears fast believe discrepancy product of timing imperfections, sum of array equals timeperiod exactly.
Comments
Post a Comment