У меня есть функция, применяемая к функции setInterval. Когда я сворачиваю или изменяю сфокусированное окно, а затем возвращаюсь в браузер, показывающий мой веб-сайт, браузер воспроизводит все, что произошло, так как я сфокусировал фокус на другое окно очень быстро.
Есть ли способ удержать анимацию, setintervals, когда окно фокуса в Windows меняется?
Благодарю.
Я нашел этот пост: JavaScript/jQuery: проверить, имеет ли окно фокус
для меня это работало на Google Chrome, но могло случиться так, что он не работает в некоторых браузерах.
Вот скрипка для тестирования:
Его ответ:
var window_focus;
$(window).focus(function() {
window_focus = true;
})
.blur(function() {
window_focus = false;
});
$(document).one('click',function() {
setInterval(function() { $('body').append('has focus? ' + window_focus + '<br>'); }, 1000);
});
Попробуй это.
var handeler;
function ShowAnimation()
{
//SetInterval code
handeler = SetInterval(myfunction, 1000);
}
//clear the handler when not in use.
function Clearhandler()
{
ClearTimeout(handeler);
}
//call the above method on the onblur event of window.
$(window).focus(ShowAnimation(),Clearhandler());
Подобно тому, как ответ Getu.ch, за исключением этого, будет выполняться только ваш "рабочий" код, если окно имеет фокус (выполняется каждые 3 секунды). Не проверен во всех браузерах, но вот ссылка, показывающая совместимость браузера window.focus/window.blur
(function($) {
var windowHasFocus = false;
$(window).focus(function() {
windowHasFocus = true;
});
$(window).blur(function () {
windowHasFocus = false;
});
setInterval(function() {
if(windowHasFocus) {
//Do your work
}
}, 3000);
});