나는 브라우저 창을 도킹하거나 탭을 전환 할 때마다 requestAnimationFrame이 호출되는 것을 멈추는 것으로 나타났습니다.requestAnimationFrame 감지 중지
이 중지가 발생할 때 감지하는 방법이 있습니까?
이유는 게임에 타이머가 있습니다. requestAnimationFrame이 더 이상 렌더링되지 않을 때 타이머를 멈추고 싶습니다.
'window.blur'및 'window.focus'이벤트를 조사했지만 requestAnimationFrame이 중지되고 시작될 때와 관련이 없습니다 (예 : 브라우저 창 외부를 클릭하면 window.blur 이벤트가 발생 함). 해고되었지만 requestAnimationFrame은 계속 실행 중입니다.)
requestAnimationFrame이 시작되고 중지 될 때 구독하고 싶습니다. 방법을 알고 있니?
var timer;
if (!window.requestAnimationFrame) {
window.requestAnimationFrame = window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame;
}
requestAnimationFrame(function again() {
if (timer === "paused") {
return;
}
clearTimeout(timer);
timer = setTimeout(function() {
timer = "paused";
console.log("got ya, you closed the window");
requestAnimationFrame(function() {
timer = null;
console.log("got ya, you re-opened the window");
requestAnimationFrame(again);
});
}, 1e3);
// rest of code goes here
requestAnimationFrame(again);
});
는 추가 정보가 필요하십니까 :
예. 이것은 rAF가 중지/시작될 때를 탐지하는 유일한 방법으로 밝혀졌습니다. 기본적으로 각 렌더링 사이의 밀리 초를 계산 중입니다. 이 수가 160을 초과하면 (6.25fps와 동일) 사용자가 브라우저에서 탭을 전환했거나 창에 고정되어 있다고 가정 할 수 있습니다. – ChrisRich