lastTick равно значению, когда функция была вызвана
lastTick
равно значению, когда функция была ранее вызвана, в последнем кадре анимации. С тех пор сценарий вернул управление браузеру и попросил перезвонить за 33 миллисекунды.
Так что curTick-lastTick
обычно будет около 33, но может быть намного выше, если браузер отстает из-за других вещей, происходящих в то же время. Вот почему отсчет времени нужно делать вообще.
Чаще всего в коде такого типа вы сохраняете время, в течение которого анимация началась , в переменной и используете setInterval
, чтобы периодически проверять ее, вместо установки полностью новой функции тайм-аута. каждый раз (особенно установка тайм-аута из строки, что очень уродливо).
ет:
затем запускает функцию animate (), которая передает текущее время
Неа. Посмотрите на вызов по тайм-ауту еще раз:
setTimeout("animate(" + new Date().getTime() + ","...
Это делает строку. new Date().getTime()
оценивается во время установки времени ожидания, не во время вызова времени ожидания. В итоге получается строка вроде:
setTimeout("animate(1275139344177, 250, 'Accordion4Content', 'Accordion4Content')", 33)
Который является временем в конце последнего кадра, а не временем истечения времени ожидания следующего кадра.
Помещение кода JavaScript в строку, подобную этой, очень запутанно, изобилует выходом из проблем и обычно считается очень плохой практикой. Было бы яснее сделать это с помощью встроенной функции:
var passTick= new Date().getTime();
setTimeout(function() {
animate(passTick, TimeToSlide, openAccordion, nID);
}, 33);