iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Page Visibility API怎么使用
  • 731
分享到

Page Visibility API怎么使用

2023-07-02 17:07:08 731人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“Page Visibility api怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Page Visibility API怎么使用”文章能帮助大家解决疑惑,下面跟着小

本文小编为大家详细介绍“Page Visibility api怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Page Visibility API怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、简介

有时候,开发者需要知道,用户正在离开页面。常用的方法是监听下面三个事件。

pagehide

beforeunload

unload

但是,这些事件在手机上可能不会触发,页面就直接关闭了。因为手机系统可以将一个进程直接转入后台,然后杀死。

  • 用户点击了一条系统通知,切换到另一个 App。

  • 用户进入任务切换窗口,切换到另一个 App。

  • 用户点击了 Home 按钮,切换回主屏幕。

  • 操作系统自动切换到另一个 App(比如,收到一个电话)。

上面这些情况,都会导致手机将浏览器进程切换到后台,然后为了节省资源,可能就会杀死浏览器进程。

以前,页面被系统切换,以及系统清除浏览器进程,是无法监听到的。开发者想要指定,任何一种页面卸载情况下都会执行的代码,也是无法做到的。为了解决这个问题,就诞生了 Page Visibility API。不管手机或桌面电脑,所有情况下,这个 API 都会监听到页面的可见性发生变化。

Page Visibility API怎么使用

这个新的 API 的意义在于,通过监听网页的可见性,可以预判网页的卸载,还可以用来节省资源,减缓电能的消耗。比如,一旦用户不看网页,下面这些网页行为都是可以暂停的。

  • 服务器的轮询

  • 网页动画

  • 正在播放的音频或视频

二、document.visibilityState

这个 API 主要在document对象上,新增了一个document.visibilityState属性。该属性返回一个字符串,表示页面当前的可见性状态,共有三个可能的值。

hidden:页面彻底不可见。

visible:页面至少一部分可见。

prerender:页面即将或正在渲染,处于不可见状态。

其中,hidden状态和visible状态是所有浏览器都必须支持的。prerender状态只在支持"预渲染"的浏览器上才会出现,比如 Chrome 浏览器就有预渲染功能,可以在用户不可见的状态下,预先把页面渲染出来,等到用户要浏览的时候,直接展示渲染好的网页。

只要页面可见,哪怕只露出一个角,document.visibilityState属性就返回visible。只有以下四种情况,才会返回hidden

  • 浏览器最小化。

  • 浏览器没有最小化,但是当前页面切换成了背景页。

  • 浏览器将要卸载(unload)页面。

  • 操作系统触发屏屏幕。

可以看到,上面四种场景涵盖了页面可能被卸载的所有情况。也就是说,页面卸载之前,document.visibilityState属性一定会变成hidden

事实上,这也是设计这个 API 的主要目的。

另外,早期版本的 API,这个属性还有第四个值unloaded,表示页面即将卸载,现在已经被废弃了。

注意,document.visibilityState属性只针对顶层窗口,内嵌的<iframe>页面的document.visibilityState属性由顶层窗口决定。

使用 CSS 属性隐藏<iframe>页面(比如display: none;),并不会影响内嵌页面的可见性。

三、document.hidden

由于历史原因,这个 API 还定义了document.hidden属性。该属性只读,返回一个布尔值,表示当前页面是否可见。

document.visibilityState属性返回visible时,document.hidden属性返回false;其他情况下,都返回true

该属性只是出于历史原因而保留的,只要有可能,都应该使用document.visibilityState属性,而不是使用这个属性。

四、visibilitychange 事件

只要document.visibilityState属性发生变化,就会触发visibilitychange事件。

因此,可以通过监听这个事件(通过document.addEventListener()方法或document.onvisibilitychange属性),跟踪页面可见性的变化。

document.addEventListener('visibilitychange', function () {  // 用户离开了当前页面  if (document.visibilityState === 'hidden') {    document.title = '页面不可见';  }  // 用户打开或回到页面  if (document.visibilityState === 'visible') {    document.title = '页面可见';  }});

上面代码是 Page Visibility API 的最基本用法,可以监听可见性变化。

下面是另一个例子,一旦页面不可见,就暂停视频播放。

var vidElem = document.getElementById('video-demo');document.addEventListener('visibilitychange', startStopVideo);function startStopVideo() {  if (document.visibilityState === 'hidden') {    vidElem.pause();  } else if (document.visibilityState === 'visible') {    vidElem.play();  }}

五、页面卸载

下面专门讨论一下,如何正确监听页面卸载。

页面卸载可以分成三种情况。

  • 页面可见时,用户关闭 Tab 页或浏览器窗口。

  • 页面可见时,用户在当前窗口前往另一个页面。

  • 页面不可见时,用户或系统关闭浏览器窗口。

这三种情况,都会触发visibilitychange事件。前两种情况,该事件在用户离开页面时触发;最后一种情况,该事件在页面从可见状态变为不可见状态时触发。

由此可见,visibilitychange事件比pagehidebeforeunloadunload事件更可靠,所有情况下都会触发(从visible变为hidden)。因此,可以只监听这个事件,运行页面卸载时需要运行的代码,不用监听后面那三个事件。

甚至可以这样说,unload事件在任何情况下都不必监听,beforeunload事件只有一种适用场景,就是用户修改了表单,没有提交就离开当前页面。另一方面,指定了这两个事件的监听函数,浏览器就不会缓存当前页面。

读到这里,这篇“Page Visibility API怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Page Visibility API怎么使用

本文链接: https://www.lsjlt.com/news/343356.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Page Visibility API怎么使用
    本文小编为大家详细介绍“Page Visibility API怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Page Visibility API怎么使用”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-07-02
  • Page Visibility API 教程示例
    目录一、简介二、document.visibilityState三、document.hidden四、visibilitychange 事件五、页面卸载一、简介 有时候,开发者需要知...
    99+
    2024-04-02
  • CSS新特性content-visibility怎么使用
    这篇“CSS新特性content-visibility怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS新特性co...
    99+
    2023-07-04
  • java中page类怎么使用
    在Java中,Page类通常用于表示一个页面对象,可以用于分页查询或分页显示数据。下面是Page类的使用示例: 首先,你需要引入P...
    99+
    2024-02-29
    java
  • thinkphp的page方法怎么使用
    这篇文章主要讲解了“thinkphp的page方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkphp的page方法怎么使用”吧!在thinkphp中,page方法是模型连...
    99+
    2023-06-29
  • CSS的page-break-after属性怎么使用
    今天小编给大家分享一下CSS的page-break-after属性怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。CS...
    99+
    2023-07-04
  • css中的backface-visibility属性怎么用
    这篇文章给大家分享的是有关css中的backface-visibility属性怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   CSS3backface-visibil...
    99+
    2024-04-02
  • 怎么使用content-visibility属性优化渲染性能
    本篇内容介绍了“怎么使用content-visibility属性优化渲染性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2024-04-02
  • WebSocket API怎么使用
    这篇文章主要介绍“WebSocket API怎么使用”,在日常操作中,相信很多人在WebSocket API怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”WebSoc...
    99+
    2024-04-02
  • windows api怎么使用
    使用Windows API需要以下步骤:1. 包含所需的头文件:在使用Windows API之前,需要包含相应的头文件。例如,如果要...
    99+
    2023-10-07
    windows
  • MyBatisplus 使用IPage和Page分页
    MyBatis Plus 是一款优秀的持久层框架,它提供了很多方便的功能,包括分页查询。其中,IPage和Page就是MyBatis...
    99+
    2023-09-02
    MyBatisplus
  • Bootstrap页面标题Page Header怎么用
    这篇文章主要介绍了Bootstrap页面标题Page Header怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下<!...
    99+
    2024-04-02
  • css中@page有什么用
    这篇文章主要介绍了css中@page有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。@page@page用于在打印文档时修改某些CSS...
    99+
    2024-04-02
  • 怎么使用API接口
    这篇文章主要介绍“怎么使用API接口”,在日常操作中,相信很多人在怎么使用API接口问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用API接口”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!接口交互前...
    99+
    2023-06-16
  • 怎么使用api代理
    本篇内容介绍了“怎么使用api代理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、直接使用代理IP。打开Internet选项,通过对局域网...
    99+
    2023-06-25
  • JavaScript DOM API怎么使用
    今天小编给大家分享一下JavaScript DOM API怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2024-04-02
  • Java中JSP的pageContext对象和page对象怎么使用
    这篇文章主要讲解了“Java中JSP的pageContext对象和page对象怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中JSP的pageContext对象和page对象...
    99+
    2023-07-05
  • Java中的API怎么使用
    这篇“Java中的API怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中的API怎么使用”文章吧。1.API...
    99+
    2023-06-29
  • Vuex中的API怎么使用
    今天小编给大家分享一下Vuex中的API怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。构造器选项state类型: O...
    99+
    2023-07-04
  • Vue3.0 API中怎么使用shallowReactive
    这篇文章主要介绍了Vue3.0 API中怎么使用shallowReactive的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3.0 API中怎么使用shallowReac...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作