HTML5中的document.visibilityState
<p><span style="font-size: 15px">在 HTML5 中,文档对象(即 document 对象)具有一个 <span style="color: rgba(255, 0, 0, 1)">visibilityState </span> 属性,该属性表示当前文档对象的可见性状态。</span></p><p><span style="font-size: 15px"> visibilityState 可能的取值有以下三种:</span></p>
<p><span style="font-size: 15px">- <span style="color: rgba(255, 0, 0, 1)">visible </span>:表示文档当前处于激活状态,即当前选项卡处于前台或当前窗口处于屏幕最上层。</span><br><span style="font-size: 15px">- <span style="color: rgba(255, 0, 0, 1)">hidden </span>:表示文档当前处于非激活状态,即当前选项卡处于后台或当前窗口被最小化或被其他窗口遮盖。</span><br><span style="font-size: 15px">- <span style="color: rgba(255, 0, 0, 1)">prerender </span>:表示文档处于预渲染状态,即当前页面正在被预先加载并渲染,但尚未成为当前活动页面。</span></p>
<p><span style="font-size: 15px">通过监视<span style="color: rgba(255, 0, 0, 1)">visibilityState </span> 属性,可以在用户切换选项卡或最小化窗口时暂停或恢复某些页面活动(如动画或视频播放)等操作,从而优化页面性能和用户体验。</span></p>
<p><br><span style="font-size: 15px"><strong> document.visibilityState</strong>属性是为了提高页面性能和节省资源而引入的新功能。在过去,开发人员通常会在页面上运行许多 JavaScript 动画或视频播放等操作,这些操作会消耗大量的 CPU、GPU 或网络带宽资源,从而影响页面的性能和响应速度。</span></p>
<p><span style="font-size: 15px">而<strong>document.visibilityState</strong>属性则使我们能够根据文档的可见性状态来控制这些操作,从而避免在页面处于非激活状态时浪费资源。例如,在用户切换选项卡或最小化窗口时,网页可以选择暂停某些操作并在用户再次切换回来时恢复它们,从而保持页面的流畅性和响应速度。</span></p>
<p><br><br><br><span style="font-size: 15px">以下是一些示例,说明如何使用<span style="color: rgba(255, 0, 0, 1)"><strong>document.visibilityState</strong></span>属性来控制页面活动:</span></p>
<p><strong><span style="font-size: 15px">1.暂停视频播放或动画效果</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听文档的可见性变化</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> visibilitychange事件: 当页面可见性发生变化时,浏览器会触发visibilitychange事件。</span>
document.addEventListener('visibilitychange', <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (document.visibilityState === 'visible'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面变为激活状态时恢复视频播放或动画效果</span>
<span style="color: rgba(0, 0, 0, 1)"> playVideo();
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面变为非激活状态时暂停视频播放或动画效果</span>
<span style="color: rgba(0, 0, 0, 1)"> pauseVideo();
}
});</span></pre>
</div>
<p> </p>
<p><br><strong><span style="font-size: 15px">2.限制页面资源消耗</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在页面处于非激活状态时暂停某些操作,以节省资源</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> doSomething() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (document.visibilityState === 'visible'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行某些操作</span>
} <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面处于非激活状态时不执行操作,以节省资源</span>
<span style="color: rgba(0, 0, 0, 1)">}
}</span></pre>
</div>
<p> </p>
<p><br><strong><span style="font-size: 15px">3.保持页面流畅性和响应速度</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在用户切换选项卡或最小化窗口时暂停某些操作,并在用户再次切换回来时恢复它们,以保持页面流畅性和响应速度</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> doSomething() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (document.visibilityState === 'visible'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行某些操作</span>
} <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面处于非激活状态时暂停操作</span>
<span style="color: rgba(0, 0, 0, 1)"> pauseSomething();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在用户再次切换回来时恢复操作</span>
document.addEventListener('visibilitychange', <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (document.visibilityState === 'visible'<span style="color: rgba(0, 0, 0, 1)">) {
resumeSomething();
}
});
}
}</span></pre>
</div>
<p> </p>
<p> </p>
<p><span style="font-size: 15px">这些示例说明了如何使用<span style="color: rgba(255, 0, 0, 1)">document.visibilityState</span>属性来控制页面活动,从而优化页面性能和用户体验。</span></p>
<p><br><br><br><span style="font-size: 15px">除了<span style="color: rgba(255, 0, 0, 1)">document.visibilityState</span>属性外,HTML5 还提供了其他相关的 API,帮助我们更好地控制页面的可见性和资源消耗。以下是一些示例:</span></p>
<p><strong><span style="font-size: 15px">1. document.hidden属性</span></strong></p>
<p><span style="font-size: 15px"> document.hidden属性是document.visibilityState === 'hidden'的简写形式,用于判断当前文档是否处于非激活状态。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (document.hidden) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当前文档处于非激活状态</span>
}</pre>
</div>
<p> </p>
<p><br><strong><span style="font-size: 15px">2. visibilitychange事件</span></strong></p>
<p><span style="font-size: 15px"> visibilitychange事件在文档的可见性状态发生变化时触发,可以通过监听该事件来控制页面活动。</span></p>
<div class="cnblogs_code">
<pre>document.addEventListener('visibilitychange', <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (document.visibilityState === 'visible'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面变为激活状态时恢复某些操作</span>
} <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面变为非激活状态时暂停某些操作</span>
<span style="color: rgba(0, 0, 0, 1)">}
});</span></pre>
</div>
<p> </p>
<p><br><strong><span style="font-size: 15px">3.Page Visibility API</span></strong></p>
<p><span style="font-size: 15px">Page Visibility API 是一组用于控制页面可见性的 JavaScript API,包括document.visibilityState属性和visibilitychange事件,以及另外两个方法: document.hasFocus()和document.activeElement 。</span></p>
<p><span style="font-size: 15px">- <span style="color: rgba(255, 0, 0, 1)">document.hasFocus()</span>方法返回一个布尔值,表示当前文档是否处于激活状态。</span><br><span style="font-size: 15px">-<span style="color: rgba(255, 0, 0, 1)"> document.activeElement</span>属性返回当前文档中获得焦点的元素。</span></p>
<p><span style="font-size: 15px">通过使用这些 API,我们可以更精确地控制页面活动,从而提高页面性能和用户体验。</span></p>
<p><br><span style="font-size: 15px">总的来说,可见性 API 为我们提供了一种更精确地控制页面活动的方式,从而提高页面性能和用户体验。可以根据页面的可见性状态来暂停或恢复某些操作,以避免浪费资源,同时保持页面的流畅性和响应速度。</span></p><br><br>
来源:https://www.cnblogs.com/ronaldo9ph/p/17373998.html
頁:
[1]