2012-10-30 2 views
4

나는 브라우저 창을 도킹하거나 탭을 전환 할 때마다 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); 
}); 

는 추가 정보가 필요하십니까 :

답변

1

당신은 더 requestAnimationFrame 틱이 없었다 경우 타이머 틱 사이에 정상적인 상황에서 적어도 4 Hz에서, 말에서 requestAnimationFrame 화재, 당신의 requestAnimationFrame 타이머를 3 Hz에서, 말을위한 타이머를 설정하고 수 있다는 사실을 알고있는 경우 멈췄다.

+0

예. 이것은 rAF가 중지/시작될 때를 탐지하는 유일한 방법으로 밝혀졌습니다. 기본적으로 각 렌더링 사이의 밀리 초를 계산 중입니다. 이 수가 160을 초과하면 (6.25fps와 동일) 사용자가 브라우저에서 탭을 전환했거나 창에 고정되어 있다고 가정 할 수 있습니다. – ChrisRich

1

이 시도? 그냥 물어봐.

+0

저는 rAF를 기반으로하는 타이머에 매우 가깝습니다. 이 바이올린을 확인하십시오 : http://jsfiddle.net/christian1974/Arjje/1/ 타이머가 잘 실행되고 탭을 전환 할 때 실제로 멈추지 만 탭으로 돌아 왔을 때 유휴 상태의 모든 시간/rAF가 작동하지 않을 때 갑자기 총 시간이 누적됩니다. 왜 볼 수 있니? – ChrisRich