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>等增强多媒体与

4

2025.12.30

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

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

2

2025.12.30

chrome什么意思
chrome什么意思

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

726

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

714

2023.11.06

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

711

2023.08.22

vlookup函数使用大全
vlookup函数使用大全

本专题整合了vlookup函数相关 教程,阅读专题下面的文章了解更多详细内容。

28

2025.12.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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号