2014-11-21 2 views
1

Из того, что я прочитал requestAnimationFrame, может сказать, когда браузер теряет фокус. Есть ли какое-то событие, которое срабатывает, когда это происходит? Я ищу, чтобы приостановить и возобновить код в связи с requestAnimationFrame.requestAnimationFrame - скажите, когда браузер теряет фокус

+0

Где вы это читали? Ссылка пожалуйста. 'requestAnimationFrame' не является элементом, на котором событие может быть запущено, когда браузер теряет фокус; он просто устанавливает обратный вызов. Стандартное поведение заключается в том, что когда браузер/вкладка выходит из фокуса, обратные вызовы приостанавливаются. Поэтому, скорее всего, ваш код (если в обратном вызове) уже приостановлен. –

+1

Возможно, я помню неправильно, но я думал, что requestAnimationFrame снижает частоту кадров, когда браузер теряет фокус. Я отредактирую свой вопрос, если это неверно. – Kahless

+0

Я предполагаю, что точное поведение зависит от браузера. Он может замедляться, или он может приостанавливаться, или где-то я видел утверждение о том, что он приостанавливается, но только через некоторое время. Только разработчики двигателей знают наверняка. Я мог бы провести несколько тестов, но я слишком ленив. –

ответ

0

requestAnimationFrame не является элементом, в котором событие может быть или уволено, когда браузер теряет фокус; он просто устанавливает обратный вызов. Но стандартное поведение заключается в том, что когда браузер/вкладка выходит из фокуса, обратные вызовы приостанавливаются. Поэтому, скорее всего, ваш код (если в обратном вызове) уже приостановлен.

Существует вероятность того, что все браузеры не смогут приостанавливать обратные вызовы, но вместо этого замедляют их. Однако W3C spec, казался бы, подразумевает приостановку, не замедляя:

Всякий раз, когда скрытый атрибут копии документа ([Страница Видимость]) ложен и список запроса обратного вызова анимации кадра не является пустым, то агент пользователя должен регулярно очереди task ...

Если скрытый атрибут d имеет значение true, перейдите к следующей записи в списке контекстов.

Если вы хотите быть абсолютно уверены, что ваш код паузы, когда язычок находится вне фокуса, или если код, который вы пытаетесь сделать паузу не структурирована как часть обратного вызова RAF, то вы могли бы рассмотреть используя Page Visibility API.

Обратите внимание, что оба API-интерфейса RAF и страницы доступны только в IE> = 10.