2013-05-14 9 views
10

Come sospendere l'animazione del canvas realizzata con requestAnimationFrame? Comincio animazione come questo:Canvas requestAnimationFrame pause

Codice:

window.requestAnimFrame = (function() { 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function(callback) { 
       window.setTimeout(callback, 1000/60); 
      }; 
})(); 

function Start() { 
    Update(); 
    requestAnimFrame(Start); 
} 

Start(); 

Ora voglio aggiungere l'opzione pausa dopo keydown. C'è un modo semplice per farlo?

+2

La soluzione di Ivan Chub funziona ma il browser continuerà a chiamare la richiestaAnnuncioFrame callback. Per evitare questo comportamento, utilizzare invece [cancelAnimationFrame] (https://developer.mozilla.org/en-US/docs/DOM/window.cancelAnimationFrame). Considerare di vedere la richiestaAnimationFrame polyfill robusto pubblicato [in questo articolo] (http://paulirish.com/2011/requestanimationframe-for-smart-animating/). –

+0

Non si deve chiamare 'requestAnimationFrame' in' Update() '? Altrimenti si chiama una funzione che non fa altro che chiamare un'altra funzione. –

risposta

8

Ciò che si potrebbe fare è creare una variabile che memorizzi lo stato dell'animazione: in pausa o non eseguita. Cambia questo stato ogni volta che fai clic su un pulsante. Qualcosa di simile dovrebbe funzionare:

var isPaused = false; 

window.requestAnimFrame = (function() { 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function(callback) { 
       window.setTimeout(callback, 1000/60); 
      }; 
})(); 

function Start() { 
    if (isPaused) { 
     Update(); 
    } 

    requestAnimFrame(Start); 
} 

window.onkeydown = function() { 
    isPaused = !isPaused; // flips the pause state 
}; 

Start(); 
Problemi correlati