2013-05-14 10 views
10

Jak wstrzymać animację płótna wykonaną przy pomocy requestAnimationFrame? zacznę animację tak:Zapytanie dotyczące CanvasAnimationFrame pauza

Kod:

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

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

Start(); 

teraz chcę dodać opcję pauzy po keydown. Czy istnieje prosty sposób na zrobienie tego?

+2

Rozwiązanie Ivana Chuba działa, ale przeglądarka będzie nadal wywoływać wywołanie requestAnimationFrame. Aby tego uniknąć, użyj zamiast tego [cancelAnimationFrame] (https://developer.mozilla.org/en-US/docs/DOM/window.cancelAnimationFrame). Zastanów się nad opublikowaniem obszernej polyfill requestAnimationFrame [w tym artykule] (http://paulirish.com/2011/requestanimationframe-for-smart-animating/). –

+0

Nie należy wywoływać 'requestAnimationFrame' w' Update() '? W przeciwnym razie wywołujesz funkcję, która nie wykonuje nic innego niż wywołanie innej funkcji. –

Odpowiedz

8

Co można zrobić, to utworzyć zmienną przechowującą stan animacji: wstrzymaną lub zatrzymaną. Zmień ten stan za każdym razem, gdy klikniesz przycisk. Coś takiego powinno zadziałać:

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(); 
Powiązane problemy