Page Visibility API用于检测页面可见性状态以优化资源消耗和用户体验,通过document.visibilityState获取visible/hidden/prerender/unloaded状态,监听visibilitychange事件实现轮播暂停、视频控制、埋点节流等优化。
页面可见性 API(Page Visibility API)能让你知道用户当前是否正在查看页面,比如切换标签页、最小化窗口或锁屏时,页面就不可见了。这不只是“页面是否在前台”的简单判断,而是帮你精准控制资源消耗、优化用户体验的关键能力。
监听页面可见性变化
通过
document.visibilityState
可以获取当前状态:
(页面可见)、
(页面不可见)、
(预渲染中,较少见)、
(页面即将卸载)。更常用的是监听
visibilitychange
事件:
在
后绑定事件,避免错过初始状态
用
快速判断当前是否隐藏(布尔值,兼容性更好)
注意:iOS Safari 在后台时可能冻结定时器和音频,但
仍会触发
暂停/恢复轮播图、动画与定时任务
页面不可见时继续运行轮播或
是常见浪费。合理做法是:
监听
,在
时
或暂停
循环
切回
时重置计时逻辑(比如重新开始倒计时,而非累积补帧)
视频自动播放策略也应配合:隐藏时
,显示时按需
(注意浏览器自动播放策略限制)
延迟上报与节流用户行为数据
用户切走后还持续发埋点请求,既无效又增加服务压力。可这样优化:
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
Java免费学习笔记(深入)
”;
页面隐藏时暂存关键行为(如表单输入、滚动位置、停留时长)到内存或
切回可见时批量上报,或结合
延迟几秒再发(避免频繁切换造成抖动)
对“页面停留时长”类指标,用
时间戳计算真实可见时长,比单纯依赖
更准确
避免误判:注意兼容性与特殊场景
虽然现代浏览器支持良好,但仍需留意:
IE10+ 和所有主流新版浏览器均支持,但需用
等前缀做降级(仅旧版 Safari/Chrome)
移动端 WebView 行为不一:部分安卓 WebView 不触发
,或锁屏后延迟触发;建议加超时兜底
不代表网络连接状态或页面是否被冻结,它只反映视觉可见性
用好 Page Visibility API,不是为了“知道用户在哪”,而是让页面更懂何时该安静、何时该响应。不复杂但容易忽略。
visiblehiddenprerenderunloadedDOMContentLoadeddocument.hiddenvisibilitychangesetIntervalvisibilitychangehiddenclearIntervalrequestAnimationFramevisiblepause()play()sessionStoragesetTimeoutvisibilitychangebeforeunloaddocument.webkitHiddenhiddenvisibilityState