利用HTML5 Page Visibility API实现页面可见性控制

重写后的标题为:利用html5 page visibility api实现页面可见性控制

早些时候,我们的浏览器不具有选项卡式浏览功能,但今天,当您查看所有可用的浏览器时,我们可以看到所有浏览器都提供该功能。作为一名程序员,我通常一次打开 10-15 个选项卡,有时这个数字会超过 25-30 个。

为什么使用此 API?

之前,无法确定哪个选项卡处于活动状态、哪个选项卡处于活动状态,但借助 HTML5 Visibility API,我们可以检测访问者是否正在查看我们的网页。

在本教程中,我们将了解如何处理 HTML5 Visibility API 以及一个简单的演示来发现页面的状态。在此演示中,我们将根据页面可见性状态更改文档标题。

立即学习“前端免费学习笔记(深入)”;

检查页面的可见性状态

随着此 API 的推出,我们迎来了两个新的文档属性,它们具有两种不同的功能。第一个是 document.visibilityState,第二个是 document.hidden。

document.visibilityState 包含四个不同的值,如下所示:

隐藏:页面在任何屏幕上都不可见预渲染:页面在屏幕外加载并且对用户不可见

可见:页面可见

已卸载:页面即将卸载(用户正在离开当前页面)

document.hidden 是布尔属性,如果页面可见则设置为 false,如果页面隐藏则设置为 true。

现在,当我们的网站对用户隐藏时,我们可以控制网站的行为方式。

我们立刻就知道了我们的可用性属性,但现在是时候侦听该事件了,以便我们可以收到有关页面可见性的新情况的通知。这是通过 visibilitychange 事件完成的。我们将看到有关如何处理此事件的快速演示。

document.addEventListener('visibilitychange', function(event) {  if (!document.hidden) {    // The page is visible.  } else {   // The page is hidden.   }});

登录后复制

此代码只是利用此事件并发现网页当前状态的基本实例。但要让您知道,这些属性和方法都应该使用供应商前缀,因为这些事件和属性在某些浏览器中是供应商前缀的。现在我们将以跨浏览器的方式看到相同的代码:

// Get Browser-Specifc Prefixfunction getBrowserPrefix() {    // Check for the unprefixed property.  if ('hidden' in document) {    return null;  }  // All the possible prefixes.  var browserPrefixes = ['moz', 'ms', 'o', 'webkit'];  for (var i = 0; i 

我们拥有所有浏览器前缀属性,并且事件已准备好应用。现在我们将相应地更改之前的代码。

// Get Browser Prefixvar prefix = getBrowserPrefix();var hidden = hiddenProperty(prefix);var visibilityState = visibilityState(prefix);var visibilityEvent = visibilityEvent(prefix);document.addEventListener(visibilityEvent, function(event) {  if (!document[hidden]) {    // The page is visible.  } else {   // The page is hidden.   }});

登录后复制

我们可以在哪里使用此 API?

我们可以考虑使用此 API 在许多不同的场景中。

假设您在仪表板上,页面正在定期(例如两分钟)轮询某些 RSS 提要或 API 的详细信息。因此,如果页面对用户不可见(即用户实际上并未查看页面),我们可以限制对 RSS 提要或 API 的调用。用于图像滑块。我们可以在页面隐藏时限制滑块图像的移动。

以类似的方式,我们可以仅在页面对用户隐藏时显示 HTML 通知。

到目前为止,我们已经看到了使用 HTML5 页面可见性 API 的代码,是时候立即采取一些行动了。

演示

演示 1:该演示展示了如何使用页面可见性 API 来更改页面标题。查看演示演示 2:该演示演示了如何在页面处于非活动状态时限制从服务器轮询数据。

在此演示中,我们将研究如何限制轮询服务器以获取最新信息,但仅限于用户正在查看页面时。我假设 jQuery 已经包含在您的页面中。这里我们将仅增加计数,但这可以替换为真实的服务器轮询。

HTML

0

登录后复制

JavaScript

    // Get Browser Prefixvar prefix = getBrowserPrefix();var hidden = hiddenProperty(prefix);var visibilityState = visibilityState(prefix);var visibilityEvent = visibilityEvent(prefix);var timer = null;function increaseVal() {var newVal = parseInt($('#valueContainer').text()) + parseInt(1);$('#valueContainer').text(newVal);document.title = newVal + ': Running'; timer = setTimeout(function() {increaseVal();        }, 1);}// Visibility Change document.addEventListener(visibilityEvent, function(event) {  if (document[hidden]) {  clearTimeout(timer);  var val = parseInt($('#valueContainer').text());  document.title = val + ': Pause';   } else {  increaseVal();    }});increaseVal();

登录后复制

演示视图

浏览器支持

如果您想查看浏览器对此 API 的支持,那么我建议查看我可以使用吗?。但要以编程方式查找浏览器支持,我建议阅读本文来检测对各种 HTML5 功能的支持。到目前为止,我们在几乎所有主要和最新的浏览器中都对该 API 提供了很好的支持。

结论

我想说,我们有一个非常好的 API,它只包含两个属性和一个事件。这样,它可以轻松地与您现有的应用程序集成,这可能会对您的用户体验产生积极影响。最终,现在我们可以控制当我们的网站对用户隐藏时我们的网站的行为方式。

以上就是利用HTML5 Page Visibility API实现页面可见性控制的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2692109.html

(0)
上一篇 2025年3月7日 17:37:18
下一篇 2025年3月6日 11:39:26

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript 程序检查是否可以通过旋转数组来增加或减少数组

    数组的旋转是指将数组假设为圆形数组,每次旋转时将数组的元素向左或向右旋转一个索引,一端的元素可以采用另一端的值。递增数组意味着每个元素将大于或等于其前一个元素,递减数组意味着每个元素将小于或等于前一个元素。 在这个问题中,我们给定一个数组,…

    2025年3月7日
    000
  • 重新构建一个数组

    数组是一个有序的值列表,通常是为了循环遍历数字索引值而创建的,从索引零开始。您需要知道的是,数组是按数字顺序排列的集合,而不是具有与非数字顺序的值关联的属性名称的对象。本质上,数组使用数字作为查找键,而对象则具有用户定义的属性名称。 Jav…

    2025年3月7日
    200
  • 实践演示:从头开始构建您自己的框架

    在本系列的第一部分中,我们讨论了允许您使用构面管理不同行为的组件,以及 Milo 如何管理消息传递。 在本文中,我们将讨论开发浏览器应用程序时的另一个常见问题:模型与视图的连接。我们将揭开 Milo 中双向数据绑定的一些“魔力”,最后,我们…

    2025年3月7日
    200
  • JavaScript中的事件类型:常见的键盘和鼠标事件

    JavaScript 提供了广泛的事件,使您可以与网页上的用户操作进行交互并做出响应。在这些事件中,键盘和鼠标事件是最常用的。在本文中,我们将了解 JavaScript 中不同类型的键盘和鼠标事件,并查看如何使用它们的示例。 键盘事件 当用…

    2025年3月7日
    200
  • JavaScript 程序计算可被 8 整除的旋转次数

    问题陈述 – 我们给出了一个数字。我们需要旋转该数字,并需要找到能被 8 整除的旋转总数。 在这里,我们将学习两种不同的方法来计算可被 8 整除的旋转次数。 旋转数字并检查旋转是否能被 8 整除 第一种方法是旋转数字并逐一获取每…

    2025年3月7日
    200
  • 如何在 JavaScript 中检查变量或对象的类型?

    JavaScript 是一种松散类型的编程语言,这意味着没有这样的规则来声明变量类型。一个变量可以在程序中存储多种数据类型,因此在使用变量之前了解变量类型非常重要。在 JavaScript 中,我们可以使用 typeof 运算符来检查变量或…

    2025年3月7日
    200
  • 如何使用FabricJS自定义画布的视口?

    在本文中,我们将学习如何使用 FabricJS 自定义画布的视口。视口是画布上用户可见的区域。我们可以使用 viewportTransform 属性来自定义视口,该属性允许我们控制视口的转换 语法 new fabric.Canvas(ele…

    2025年3月7日
    200
  • Konva 的 HTML5 Canvas 事件:第 5 部分,操作

    如果您从一开始就关注本系列,那么您现在应该对形状、组和图层非常熟悉。您还应该能够使用 Konva 在画布上轻松绘制一些基本和复杂的形状。如果您计划使用 Konva 创建一些交互式应用程序或游戏,那么学习如何将事件绑定到舞台上的不同形状是下一…

    2025年3月7日
    200
  • 如何创建一个同时提交表单和下载 pdf 的按钮?

    通过使用 HTML、JavaScript 和 jsPDF,我们可以创建一个可以同时提交表单和下载 pdf 的按钮。我们将使用 HTML 创建表单,使用 JavaScript 处理提交过程,并使用 jsPDF 生成 PDF 文档。提交表单和获…

    2025年3月7日
    200
  • 免费开源的顶级 JavaScript 动画库

    如果使用得当,动画可以显着改善用户体验。网页上有许多元素可以通过动画处理使其变得生动起来。按钮的背景颜色或网页上某些元素的边框半径等基本内容也可以使用 CSS 进行动画处理。 但是,CSS 有其局限性,如果您想更好地控制动画元素的各个方面,…

    2025年3月7日
    200

发表回复

登录后才能评论