2015-08-01 4 views
-1

Я пытаюсь создать функцию, используя пользовательский таймер, который будет продвигать один кадр моей анимации. Я запускаю. У меня есть таймер, способный сделать паузу и возобновить на данный момент, но я не смог найти способ получить функцию шага. Моя задержка ожидания анимации установлена ​​на уровне 25 мс.javascript setTimeout timer step function

Вот что я работаю с:

Delay = 25

//This function is a custom timer that tracks the start time of a timeout and calculates the remaining time 
    // in order to resume at the appropriate frame of animation. 
function Timer(callback, delay) { 
    var timerId, start, remaining = delay; 

    this.pause = function() { 
     window.clearTimeout(timerId); 
     remaining -= new Date() - start; 
     animate = false; 
    }; 

    this.resume = function() { 
     start = new Date(); 
     window.clearTimeout(timerId); 
     timerId = window.setTimeout(callback, remaining); 
     animate = true; 
    }; 

    this.resume(); 
} 

Я признателен за любую помощь, что кто-то может дать мне, я все еще учусь и никогда не было хорошо с таймеры или события таймера.

ОБНОВЛЕНИЕ Мне удалось исправить свою проблему! Вот что я получил в итоге.

//This function is a custom timer that tracks the start time of a timeout and calculates the remaining time 
// in order to resume at the appropriate frame of animation. 
function Timer(callback, delay){ 
    var timerId, start, remaining = delay; 

    this.pause = function(){ 
     window.clearTimeout(timerId); 
     remaining -= new Date() - start; 
     animate = false; 
    }; 

    this.resume = function(){ 
     start = new Date(); 
     window.clearTimeout(timerId); 
     timerId = window.setTimeout(callback, remaining); 
     animate = true; 
    }; 

    this.step = function(){ 
     timer.pause(); 
     animate = false; 
     advanceAnimation(true); 
    }; 

    this.resume(); 
} 
+0

Как это работает? Что пошло не так? Любые ошибки в консоли? – Teemu

+0

Я, наконец, понял, что только манипулирую некоторой логикой анимации. Я смог достичь своего результата, сначала вызвав функцию паузы по таймеру, установив ложную переменную boolean в переменную false и вручную вызвав мою анимационную функцию рисования один раз вместо того, чтобы ее вызывал таймаут. – user3786596

ответ

0

Вместо тайм-аута, вы можете использовать интервал, который будет повторяться, как шаг до clearInterval() была вызвана.

+0

Спасибо за помощь, я не знал о Intervals! – user3786596