2013-05-14 3 views
10

requestAnimationFrame으로 만든 캔버스 애니메이션을 일시 중지하는 방법은 무엇입니까? 이 같은 애니메이션을 시작합니다캔버스 requestAnimationFrame 일시 중지

코드 :

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

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

Start(); 

지금 나는를 keyDown 후 일시 정지 옵션을 추가 할 수 있습니다. 그것을 할 수있는 간단한 방법이 있습니까?

+2

Ivan Chub 솔루션이 작동하지만 브라우저에서 requestAnimationFrame 콜백을 계속 호출합니다. 이 문제를 방지하려면 대신 [cancelAnimationFrame] (https://developer.mozilla.org/en-US/docs/DOM/window.cancelAnimationFrame)을 사용하십시오. requestAnimationFrame 강력한 polyfill이 [이 기사에 게시 됨] (http://paulirish.com/2011/requestanimationframe-for-smart-animating/)을 참조하십시오. –

+0

'requestAnimationFrame'을'Update()'에서 호출하면 안되나요? 그렇지 않으면 다른 함수를 호출하는 것 외에는 아무것도 수행하지 않는 함수를 호출합니다. –

답변

8

애니메이션의 상태 (일시 중지 또는 일시 중지 해제)를 저장하는 변수를 만들 수 있습니다. 버튼을 클릭 할 때마다 상태를 변경하십시오. 이런 식으로 작동해야합니다 :

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(); 
관련 문제