使用 Page Visibility API ,让网站更友好

简介: 我们可能都有这样的经历:打开一个浏览器,加载之前打开的所有标签页,听到几个页面发出的混合在一起的声音。虽然浏览器通过标签的声音图标、插件等方法告知用户发声的页面,但这种体验还是很糟糕。作为开发者和设计者,我们有责任让网站更受欢迎。

我们可能都有这样的经历:打开一个浏览器,加载之前打开的所有标签页,听到几个页面发出的混合在一起的声音。虽然浏览器通过标签的声音图标、插件等方法告知用户发声的页面,但这种体验还是很糟糕。作为开发者和设计者,我们有责任让网站更受欢迎。

网站是不是应该在被激活使用时才能发出声音?为什么我们要浪费资源和进程在我们看不到的动画上?

幸运的是,现在有一个解决方案:HTML5 有个Page Visibility(页面可见性)的API。你可以看到Active Theory已经在新项目里使用了这个API。例如Under ArmorA Spacecraft For All

幸运的是,现在有一个解决方案:HTML5 有个页面可见(Page Visibility)的API。你可以看到Active Theory已经在新项目里使用了这个API。例如Under ArmorA Spacecraft For All:点击其他标签页,刚才还在运行的多媒体就会暂停。我喜欢把这样的网站成为“有礼貌的网站(polite web)”:网站考虑了用户的注意力、带宽等。

开发者曾经用绑定onblur()onfocus()事件来尝试完成这样的效果。他们这样比什么都不做的好,但是这样的做法不能分辨窗口是否是真的隐藏。比如:有两个左右并排的窗口,用户都能看到他们的内容,但是在两个窗口之间切换时还是或激发onblur()onfocus()事件。


使用Page Visibility

有很多使用Page Visibility API的情况,最常见的情况是——页面有一个视频,但用户看不到它,那就没有必要继续播放它。

<videoautoplaycontrolsid="videoElement">

   <sourcesrc="rar.mp4">

   <sourcesrc="rar.webm">

</video>

<script>

var videoElement = document.getElementById("videoElement");

document.addEventListener("visibilitychange", function() {

   if (document.hidden) {    

       videoElement.pause();  

   } else {

       videoElement.play();  

   }

});

</script>

但是这样有个问题,让用户觉得有点突然:用户切换标签时突然打开或停止视频的声音。可以把效果改为切换标签时渐渐显示或隐藏声音。这个可以借助jQuery的动画方法完成。

<script>

var videoElement = document.getElementById("videoElement");

document.addEventListener("visibilitychange", function() {

   if (document.hidden) {    

       $("#videoElement").animate({volume: 0}, 1000, "linear", function() {

           videoElement.pause();

       });

   } else {

       videoElement.play();  

       $("#videoElement").animate({volume: 1}, 1000, "linear");

   }

});

</script>


规范

Page Visibility API的规范很简单,只有两个方法:document.hidden 根据浏览器窗口的状态返回 truefalse。具体的状态存储在document.visibilityStatehiddenvisibleprerenderunloaded)里。visibilitychange可以作为一个事件。document.visibilityState可以检测为什么document不可见。但是document.hidden已经能满足大部分的需求。


注意事项和浏览器支持

Page Visibility API采用保守的方式来报告document的隐藏:如果用户在同一浏览器窗口里切换就会报告,但如果是用别的窗口遮住当前页面,就不会报告。这个API不是万无一失的,在某些情况下会误报,使用的时候要小心。

浏览器对Page Visibility API的支持是比较好的:所有的现代浏览器(除了Opera Mini)都支持这个API,包括IE10+。供应商前缀也慢慢取消:目前需要-webkit前缀是Android和黑莓的浏览器。我在上面的代码中为了简化操作,没有加前缀。但是添加前缀和测试也很方便。

Page Visibility API是Progressive Enhancement(渐进增强)的一个好例子。如果浏览器不支持这个API,该脚本将被忽略,用户将像平时一样被不受控制的声音打扰。


其他用法

Page Visibility API不仅可以用于声音和视频,还可以用于slider 、 PPT。

使用这个API可以使网站更友好、更绿色、更有责任感。建议广大开发者和设计师考虑把它整合到自己的项目中。

相关文章
|
2月前
|
JSON 前端开发 JavaScript
从API到界面:如何将淘宝/天猫商品详情返回值转化为用户友好的展示
在当今数字化时代,API(应用程序编程接口)已经成为连接不同服务和数据的桥梁。对于电商平台来说,API更是不可或缺的一部分。本文将以淘宝/天猫为例,探讨如何将API返回的商品详情数据转化为用户友好的展示形式。我们将通过代码示例来揭示这一过程。
|
Web App开发 API
网站截图API接口
网页截屏大师使用真正的Chrome浏览器捕捉像素完美的屏幕截图,我们的核心服务托管在阿里云之上,API天然分布式、高可用。
|
1月前
|
JSON 前端开发 API
API到界面:如何将淘宝天猫商品详情返回值转化为用户友好的展示
将淘宝/天猫商品详情的API返回值转化为用户友好的展示涉及前端开发和用户体验设计。以下是一些关键步骤和考虑因素:
|
2月前
|
Web App开发 存储 移动开发
Page Visibility API(页面是否可见)
Page Visibility API(页面是否可见)
14 0
|
4月前
|
缓存 Java API
Java API设计实战指南:打造稳健、用户友好的API
本文将深入探讨在Java中设计有效API的原则,并着重介绍RESTful设计原则、版本控制策略以及文档实践。
193 38
|
6月前
|
安全 物联网 API
什么是 API 以及电子商务网站为何使用它们
从技术上讲,API是应用程序编程接口的首字母缩写,被认为是构建应用软件的一组协议。实际上,API 是让人们保持数字联系的大部分基础。 从我们手机上的应用程序到复杂的飞行控制系统,API 将原本完全不同的系统组合在一起以创建单一平台。它们允许应用程序或物联网设备访问数据并创建网关以与外部系统交互。 它们是将数字世界结合在一起的结缔组织,可以通过简单的 HTML 插入,而无需了解 Python 等编程语言。 对于电子商务企业而言,API,尤其是 Web API,是使用您的平台获得更好的客户洞察力、提供额外购买机会等的机会。 公司有机会将其整个业务转变为一个整体平台,从而扩展现有架构的功能。
|
11月前
|
前端开发 JavaScript API
上传Api成功但在苹果开发者网站App Store Connect中未显示构建版本
上传Api成功但在苹果开发者网站App Store Connect中未显示构建版本的解决方案
|
12月前
|
人工智能 移动开发 文字识别
十大 API 平台网站分享(包括常用的API 大全整理)
十大 API 平台网站分享(包括常用的API 大全整理)
6981 0
|
SQL API 数据库
easyswoole快速实现一个网站的api接口程序
easyswoole快速实现一个网站的api接口程序
96 0
easyswoole快速实现一个网站的api接口程序
|
Web App开发 移动开发 Ubuntu
HTML5 Web Speech API,让网站更有趣
Web API 变得越来越丰富,其中一个值得注意的是Web Speech API。传统的网站只能“说”,这个API的出现,让网站能“倾听”用户。这个功能已经开放了一系列的用法,非常棒。
538 0
HTML5 Web Speech API,让网站更有趣