窗口焦点检测是指判断当前浏览器窗口或标签页是否处于用户活动状态(即用户正在查看该窗口)。这在需要根据用户交互状态调整应用行为时非常有用。
// 检测窗口是否获得焦点
function isWindowFocused() {
return document.hasFocus();
}
// 使用示例
if (isWindowFocused()) {
console.log('窗口当前处于焦点状态');
} else {
console.log('窗口当前不在焦点状态');
}
// 监听焦点变化事件
window.addEventListener('focus', function() {
console.log('窗口获得焦点');
});
window.addEventListener('blur', function() {
console.log('窗口失去焦点');
});
// 检测窗口是否获得焦点
function isWindowFocused() {
return $(document).is(':focus');
}
// 使用示例
if (isWindowFocused()) {
console.log('窗口当前处于焦点状态');
} else {
console.log('窗口当前不在焦点状态');
}
// 监听焦点变化事件
$(window).focus(function() {
console.log('窗口获得焦点');
});
$(window).blur(function() {
console.log('窗口失去焦点');
});
原因:某些浏览器可能对焦点事件的支持不一致
解决方案:结合visibilitychange
事件使用
document.addEventListener('visibilitychange', function() {
if (document.visibilityState === 'visible') {
console.log('窗口可见');
} else {
console.log('窗口不可见');
}
});
原因:移动设备上切换应用可能不会触发blur事件 解决方案:结合Page Visibility API
// 综合解决方案
function getWindowFocusState() {
return document.hasFocus() && document.visibilityState === 'visible';
}
原因:iframe中的文档可能无法正确检测父窗口的焦点状态 解决方案:在父窗口中检测并通过postMessage通信
// 父窗口
window.addEventListener('focus', function() {
const iframe = document.getElementById('myIframe');
iframe.contentWindow.postMessage('focus', '*');
});
window.addEventListener('blur', function() {
const iframe = document.getElementById('myIframe');
iframe.contentWindow.postMessage('blur', '*');
});
// iframe中
window.addEventListener('message', function(event) {
if (event.data === 'focus') {
console.log('父窗口获得焦点');
} else if (event.data === 'blur') {
console.log('父窗口失去焦点');
}
});
没有搜到相关的沙龙