首页 > 其他分享 >HTML5中的document.visibilityState

HTML5中的document.visibilityState

时间:2023-05-05 14:22:55浏览次数:33  
标签:visibilityState 激活状态 文档 HTML5 visibilitychange document 页面

在 HTML5 中,文档对象(即 document 对象)具有一个 visibilityState 属性,该属性表示当前文档对象的可见性状态。

visibilityState 可能的取值有以下三种:

- visible :表示文档当前处于激活状态,即当前选项卡处于前台或当前窗口处于屏幕最上层。
- hidden :表示文档当前处于非激活状态,即当前选项卡处于后台或当前窗口被最小化或被其他窗口遮盖。
- prerender :表示文档处于预渲染状态,即当前页面正在被预先加载并渲染,但尚未成为当前活动页面。

通过监视 visibilityState 属性,可以在用户切换选项卡或最小化窗口时暂停或恢复某些页面活动(如动画或视频播放)等操作,从而优化页面性能和用户体验。


document.visibilityState 属性是为了提高页面性能和节省资源而引入的新功能。在过去,开发人员通常会在页面上运行许多 JavaScript 动画或视频播放等操作,这些操作会消耗大量的 CPU、GPU 或网络带宽资源,从而影响页面的性能和响应速度。

document.visibilityState 属性则使我们能够根据文档的可见性状态来控制这些操作,从而避免在页面处于非激活状态时浪费资源。例如,在用户切换选项卡或最小化窗口时,网页可以选择暂停某些操作并在用户再次切换回来时恢复它们,从而保持页面的流畅性和响应速度。




以下是一些示例,说明如何使用 document.visibilityState 属性来控制页面活动:

1. 暂停视频播放或动画效果

// 监听文档的可见性变化
// visibilitychange事件: 当页面可见性发生变化时,浏览器会触发visibilitychange事件。
document.addEventListener('visibilitychange', function() {
  if (document.visibilityState === 'visible') {
    // 页面变为激活状态时恢复视频播放或动画效果
    playVideo();
  } else {
    // 页面变为非激活状态时暂停视频播放或动画效果
    pauseVideo();
  }
});

 


2. 限制页面资源消耗

// 在页面处于非激活状态时暂停某些操作,以节省资源
function doSomething() {
  if (document.visibilityState === 'visible') {
    // 执行某些操作
  } else {
    // 页面处于非激活状态时不执行操作,以节省资源
  }
}

 


3. 保持页面流畅性和响应速度

// 在用户切换选项卡或最小化窗口时暂停某些操作,并在用户再次切换回来时恢复它们,以保持页面流畅性和响应速度
function doSomething() {
  if (document.visibilityState === 'visible') {
    // 执行某些操作
  } else {
    // 页面处于非激活状态时暂停操作
    pauseSomething();
    // 在用户再次切换回来时恢复操作
    document.addEventListener('visibilitychange', function() {
      if (document.visibilityState === 'visible') {
        resumeSomething();
      }
    });
  }
}

 

 

这些示例说明了如何使用 document.visibilityState 属性来控制页面活动,从而优化页面性能和用户体验。




除了 document.visibilityState 属性外,HTML5 还提供了其他相关的 API,帮助我们更好地控制页面的可见性和资源消耗。以下是一些示例:

1. document.hidden 属性

document.hidden 属性是 document.visibilityState === 'hidden' 的简写形式,用于判断当前文档是否处于非激活状态。

if (document.hidden) {
  // 当前文档处于非激活状态
}

 


2. visibilitychange 事件

visibilitychange 事件在文档的可见性状态发生变化时触发,可以通过监听该事件来控制页面活动。

document.addEventListener('visibilitychange', function() {
  if (document.visibilityState === 'visible') {
    // 页面变为激活状态时恢复某些操作
  } else {
    // 页面变为非激活状态时暂停某些操作
  }
});

 


3. Page Visibility API

Page Visibility API 是一组用于控制页面可见性的 JavaScript API,包括 document.visibilityState 属性和 visibilitychange 事件,以及另外两个方法: document.hasFocus() 和 document.activeElement 。

- document.hasFocus() 方法返回一个布尔值,表示当前文档是否处于激活状态。
- document.activeElement 属性返回当前文档中获得焦点的元素。

通过使用这些 API,我们可以更精确地控制页面活动,从而提高页面性能和用户体验。


总的来说,可见性 API 为我们提供了一种更精确地控制页面活动的方式,从而提高页面性能和用户体验。可以根据页面的可见性状态来暂停或恢复某些操作,以避免浪费资源,同时保持页面的流畅性和响应速度。

标签:visibilityState,激活状态,文档,HTML5,visibilitychange,document,页面
From: https://www.cnblogs.com/ronaldo9ph/p/17373998.html

相关文章

  • vue学习 第十天(2) HTML5的新特性 ----- 语义化标签(布局标签)/ 多媒体标签(video、
    目标:能够说出3~5个HTML5新增布局和表单标签能够说出CSS3的新增特性有哪些 HTML5的新特性 HTML的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。新特性都有兼容性问题,基本是IE9+以上版本......
  • HTML5+CSS3
    CSS3HTMLHTML总结......
  • BAPI_ACC_DOCUMENT_POST 解决多行一次性供应商凭证导入问题
     POST函数将一次性供应商的信息放在抬头入参上,业务需要多个一次性供应商一起做凭证时,就满足不了。抬头入参会把所有行的一次性给一样的名称。想起之前做的 IF_EX_ACC_DOCUMENT~CHANGE,于是尝试了一下,发现可以解决IF_EX_ACC_DOCUMENT~CHANGE  "add by itl_csw 28.04.......
  • 【TypeScript】document.body.style TS 报错 Cannot assign to 'style' because it is
    报错信息解决方法style对象提供了一个cssText属性,支持设置多种CSS样式:document.body.style.cssText=`width:${targetX}px;height:${targetY}px;transform:scale(${scaleRatio})translateX(-50%);left:50%`;还有其他方法也可以,参考下面的文章参考文章七爪源码:使用......
  • 认识HTML5的WebSocket
    在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocketAPI。WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看HTML5的WebSocketAPI:它可用于客户端、服务器......
  • document.forms[0],得不到文本框的值,没错误提示的错误,表单提交
    我测试错误信息,可是我明明往文本框里输入值了,却告诉我没输入值,还不报错,我就找原因,检查了好几遍,也没找出错误,最后定位在document.forms[0],因为我的一个jsp里有好几个form表单,我那个得不到值的是最后一个表单,第4个,我就把document.forms[0]改成了document.forms[......
  • HTML5布局练习
    传统布局 HTML5布局新布局的意义 HTML5布局练习1结构层从上至下从左至右从外至里·······补充:li不利于搜索引擎收录,尽量少用2表现层熟练运用绝对定位排序:CSScomb插件:CSS属性排序工具。快捷键:ctrl+shift+C美化:ctrl+shift+H       ......
  • createDocumentFragment
    主要区别createElement创建的是元素节点,节点类型为1,createDocumentFragment创建的是文档碎片,节点类型是11性能优势程序员可以使用DocumentFragment将一批子元素添加到任何类似node的父节点上,对这批子元素的操作不需要一个真正的根节点。程序员可以不依赖可见的DOM来构造一个DOM结构......
  • jQuery的$(document).ready(function(){ })的疑惑的解答
    最早接触的时候也说$(document).ready(function(){})这个函数是用来取代页面中的window.onload;但是今天发现好像不是这样回事!是在做一个页面载入效果时发现的!functionwinready(){document.getElementById("loading").style.display="none";}window.onload=winready;以......
  • HTML5实现文件上传下载功能实例解析
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......