Я пытаюсь выполнять одну и ту же анимацию несколько раз один за другим.
Вот функция оболочки requestAnimationFrame и функция обработки интервалов:
Animator.prototype.animationFrame = function (options) {
var requestAnimFrame = requestAnimationFrame ||
webkitRequestAnimationFrame ||
mozRequestAnimationFrame ||
msRequestAnimationFrame ||
function (callback) {return setTimeout(callback, 1000/60);},
cancelAnimFrame = cancelAnimationFrame || mozCancelAnimationFrame,
start = performance.now();
var interval = requestAnimFrame(function animate(time) {
var timeFraction = (time - start) / options.duration;
if (timeFraction > 1) timeFraction = 1;
var progress = options.timing(timeFraction);
options.draw(progress);
if (timeFraction < 1) {
requestAnimFrame(animate);
}else{
cancelAnimFrame(interval);
return options.callback();
}
});};
Функция обратного вызова вызывается во всех рекурсивных вызовах анимации, и моя цель - вызвать обратный вызов только один раз, после чего перезапустить анимацию снова.
Вызов анимации будет выглядеть так:
this.animationFrame({
duration: 3000,
timing: function linear(timeFraction) {
return timeFraction;
},
draw: function(progress) {
var result = to * progress;
element.innerText = text.substr(0, Math.ceil(result))
},
callback: function () {
self.clearStyles(self._wrapper);
setTimeout(function () {
self.startAnimations();
}, 1000);
}
});
Если нужен рабочий пример, я предоставлю его по запросу. Заранее спасибо.