0

0

html5如何实现页面可见性检测_visibilitychange事件用法【教程】

星夢妙者

星夢妙者

发布时间:2025-12-31 11:59:02

|

334人浏览过

|

来源于php中文网

原创

页面可见性检测依赖 document.visibilityState 和 visibilitychange 事件,需绑定在 document 上,支持值为 'visible'、'hidden' 等,但 iOS 存在误判,SSR 需判断环境。

html5如何实现页面可见性检测_visibilitychange事件用法【教程】

页面可见性检测靠 document.visibilityStatevisibilitychange 事件

HTML5 提供了原生的页面可见性 API,不需要轮询或定时器。核心是两个东西:document.visibilityState(当前状态值)和监听 visibilitychange 事件。它比 blur/focus 更精准——比如用户切换到另一个标签页、最小化窗口、锁屏,甚至某些浏览器中打开开发者工具,都可能触发该事件。

visibilitychange 事件监听必须绑定在 document

这个事件不会冒泡到 window,也不能用 addEventListener 绑在任意 DOM 元素上。只对 document 有效,且建议在脚本加载后尽早注册,避免漏掉初始状态变化。

document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'visible') {
    console.log('页面变为可见');
  } else if (document.visibilityState === 'hidden') {
    console.log('页面被隐藏');
  }
});
  • visibilityState 可能的值有:'visible''hidden''prerender'(已废弃,现代浏览器基本不返回)、'unloaded'(极少见)
  • 首次加载时不会触发 visibilitychange,但你可以直接读取 document.visibilityState 获取初始状态
  • 不要在事件回调里做耗时操作,比如发起网络请求或重绘大量 DOM,因为该事件可能在后台频繁触发(如 Chrome 中快速切回标签)

常见误判场景:Safari/iOS 的特殊行为

iOS Safari 对 visibilityState 的判断更保守。比如页面进入后台后,可能长时间维持 'visible';又或者播放视频/音频时,即使切到其他 App,visibilityState 仍为 'visible'(因媒体仍在运行)。这会导致你基于可见性做的逻辑失效。

Build AI
Build AI

为您的业务构建自己的AI应用程序。不需要任何技术技能。

下载
  • 若需兼容 iOS 后台音频场景,应额外监听 pagehidepageshow 事件作为补充
  • 不能仅依赖 visibilityState === 'hidden' 就暂停计时器或取消动画——iOS 下可能根本不触发
  • 测试时务必真机验证,模拟器或桌面 Safari 行为差异大

Page Visibility API 相关的兼容性注意事项

所有现代浏览器都支持,但 IE10+ 仅支持带前缀的版本:msvisibilitychangemsHidden。不过 IE 已淘汰,除非维护遗留系统,否则可忽略前缀。

立即学习前端免费学习笔记(深入)”;

  • 检查支持性只需一行:'hidden' in document(返回 true 即表示支持)
  • document.hidden 是旧式布尔属性,已被 visibilityState 取代,但仍可读(返回 true 等价于 visibilityState === 'hidden'
  • SSR 渲染时注意:服务端没有 document,相关代码需包裹在 if (typeof document !== 'undefined') 中,否则报错
实际使用中最容易被忽略的是 iOS 的行为偏差和 SSR 环境下的执行时机——这两处不处理好,功能在真实用户场景中就会“看起来正常,实则失效”。

相关专题

更多
html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

498

2023.10.23

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

416

2024.03.06

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

3

2025.12.30

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

5

2025.12.30

html5空格代码怎么写
html5空格代码怎么写

在HTML5中,空格不能直接通过键盘空格键实现,需使用特定代码。本合集详解常用空格写法:&nbsp;(不间断空格)、&ensp;(半个中文空格)、&emsp;(一个中文空格)及CSS的white-space属性等方法,帮助开发者精准控制页面排版,避免因空格失效导致布局错乱,适用于新手入门与实战参考。

2

2025.12.30

html5怎么做网站教程
html5怎么做网站教程

想从零开始学做网站?这份《HTML5怎么做网站教程》合集专为新手打造!涵盖HTML5基础语法、页面结构搭建、表单与多媒体嵌入、响应式布局及与CSS3/JavaScript协同开发等核心内容。无需编程基础,手把手教你用纯HTML5创建美观、兼容、移动端友好的现代网页。附实战案例+代码模板,快速上手,轻松迈出Web开发第一步!

4

2025.12.31

HTML5建模教程
HTML5建模教程

想快速掌握HTML5模板搭建?本合集汇集实用HTML5建模教程,从零基础入门到实战开发全覆盖!内容涵盖响应式布局、语义化标签、Canvas绘图、表单验证及移动端适配等核心技能,提供可直接复用的模板结构与代码示例。无需复杂配置,助你高效构建现代网页,轻松上手前端开发!

3

2025.12.31

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

726

2023.08.11

小游戏4399大全
小游戏4399大全

4399小游戏免费秒玩大全来了!无需下载、即点即玩,涵盖动作、冒险、益智、射击、体育、双人等全品类热门小游戏。经典如《黄金矿工》《森林冰火人》《狂扁小朋友》一应俱全,每日更新最新H5游戏,支持电脑与手机跨端畅玩。访问4399小游戏中心,重温童年回忆,畅享轻松娱乐时光!官方入口安全绿色,无插件、无广告干扰,打开即玩,快乐秒达!

30

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.7万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.2万人学习

CSS教程
CSS教程

共754课时 | 17.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号