1、HTML5中与页面显示相关的API

在HTML5中,增加了几个与页面显示相关的API,其中一个是Page Visibility API

Page Visibility API  是指当页面变为最小化状态或者用户将浏览器标签切换到其他标签时会触发。

Page Visibility API的使用场合如下:

  1. 一个应用程序中具有多幅图片的幻灯片式的连续播放功能,当页面变为不可见状态(最小化状态或者将用户浏览器标签切换到其他标签时),图片停止播放,当页面变为可见状态时,图片继续播放。
  2. 在一个实时显示服务器端信息的应用程序中,当页面处于不可见状态(最小化状态或者将用户浏览器标签切换到其他标签时),停止定期向服务器端请求数据的处理,当页面变为可见状态,继续执行定期向服务器端请求数据的处理。
  3. 在一个具有播放视频功能的应用程序中,当页面处于不可见状态(最小化状态或者将用户浏览器标签切换到其他标签时),暂停播放视频,当页面变为可见状态时,继续播放视频。

1.1实现Page Visibility API

在使用Page Visibility API时,我们首先需要判断当前用户所使用的浏览器以及该浏览器是否支持。代码如下判断:

if(typeof document.hidden !== 'undefined') {

hidden = 'hidden';

visibilityChange = 'visibilitychange';

}else if(typeof document.mozHidden !== 'undefined') {

hidden = 'mozHidden';

visibilityChange = 'mozvisibilitychange';

}else if(typeof document.msHidden !== 'undefined') {

hidden = 'msHidden';

visibilityChange = 'msvisibilitychange';

}else if(typeof document.webkitHidden !== 'undefined') {

hidden = 'webkitHidden';

visibilityChange = 'webkitvisibilitychange';

}

如上,在Page Visibility  API中,可以通过document对象的hidden属性值来判断页面是否处于可见状态,当页面处于可见状态时属性值为false,当页面处于不可见状态时属性值为true。

在Page Visibility中,可以通过document对象的visibilityState属性值来判断页面的可见状态。该属性值为一个字符串,其含义如下所示:

visible: 页面内容部分可见,当前页面位于用户正在查看的浏览器标签窗口中,且浏览器窗口未被最小化。

hidden: 页面内容对用户不可见。当前页面不在用户正在查看的浏览器标签窗口中,或浏览器窗口已被最小化。

prerender: 页面内容已被预渲染,但是对用户不可见。

Demo中,页面中有一个video元素与一个”播放”按钮,用户单击”播放”按钮时 按钮文字变为 ’暂停”,同时开始播放video元素的视频,当页面变为最小化状态或用户浏览器标签切换到其他标签时候,视频被暂停播放,当页面恢复正常状态或用户将浏览器标签切回页面所在标签时,视频继续播放。

HTML代码如下:

<video id="videoElement" controls width=640 height=360 autoplay>

<source src="GTO.mp4" type='video/mp4'>

</video>

<button id="btnPlay" onclick="PlayOrPause()">播放</button>

<div style="height:1500px;"></div>

JS部分代码如下:

document.addEventListener(visibilityChange,handle,false);

videoElement = document.getElementById("videoElement");

videoElement.addEventListener('ended',videoEnded,false);

videoElement.addEventListener('play',videoPlay,false);

videoElement.addEventListener('pause',videoPause,false);

// 如果页面变为不可见状态 则暂停视频播放

// 如果页面变为可见状态,则继续视频播放

function handle() {

// 通过visibilityState属性值判断页面的可见状态

console.log(document.visibilityState);

if(document[hidden]) {

videoElement.pause();

}else {

videoElement.play();

}

}

// 播放视频

function play() {

videoElement.play();

}

// 暂停播放

function pause() {

videoElement.pause();

}

function PlayOrPause() {

if(videoElement.paused) {

videoElement.play();

}else {

videoElement.pause();

}

}

function videoEnded(e) {

videoElement.currentTime = 0;

this.pause();

}

function videoPlay(e) {

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

btnPlay.innerHTML = "暂停";

}

function videoPause(e) {

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

btnPlay.innerHTML = "播放";

}

HTML5中与页面显示相关的API的更多相关文章

  1. 微信小程序开发过程中tabbar页面显示的相关问题及解决办法!

    在微信小程序的开发过程中如果有使用过tabbar的同学,我相信一定会遇到一些困扰.为什么有些时候代码中明明已经在app.json里面增加了tabbar,可以页面中就是不显示呢?可不可以有些页面显示ta ...

  2. 用jquery将多个页面中相似页面显示到一个页面并实现来回跳转

    今天遇到一个问题,客户说页面来回跳转太麻烦了,需要把相似的页面做到一个页面上去. 接下来说一下记录一下解决方法. 首先这是三个页面中相似的Div: <div class="wenti& ...

  3. SpringMVC中JSP页面显示为源码

    @RequestMapping(value = "login") public ModelAndView login(ModelAndView mav) throws Except ...

  4. Jsp中操作页面显示

    通常我们想改变网页中的显示可以用下面的方式. <script type="text/javascript">function show(){     document. ...

  5. html5中让页面缩放的4种方法

    1.viewport 这种方法,不是所有的浏览器都兼容<meta name="viewport" content="width=640,minimum-scale= ...

  6. 全栈JavaScript之路(十四)HTML5 中与class属性相关的扩充

    1. getElementByClassName() :支持getElementsByClassName()方法的浏览器有IE 9+.Firefox 3+.Safari 3.1+.Chrome 和 O ...

  7. 关于HTML5中hash部分API在历史管理,选项卡自动跳转中的一点使用

    在群里最近有人提到如何处理在页面跳转之后,想要直接定位到相对应的选项卡的选项上,比如首页有登录和注册两个按钮,而登录注册页面有一对选项卡分别对应的是登陆和注册,想要实现的功能是点击登陆去到登录页的登录 ...

  8. html5中canvas的使用 获取鼠标点击页面上某点的RGB

    1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script ...

  9. 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍

    一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...

随机推荐

  1. LeetCode() Symmetric Tree

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  2. MFC编程 | 非模态对话框的定义

    因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // 非模态对话框的定义 // 通过单文档菜单调用一个非模态窗口 1.首先在工程里插入一个对话框(如:IDD_DLG_TEST ...

  3. 顶点缓存对象(VBO)

    创建VBO 绘制VBO 更新VBO 实例 GL_ARB_vertex_buffer_object扩展致力于提供顶点数组与显示列表的优势来提升OpenGL效率,同时避免它们实现上的不足.顶点缓存对象(V ...

  4. Yii2 利用controllerMap自定义控制器类

    版权声明:本文为博主原创文章,未经博主允许不得转载. Yii2框架为我们自定义好的  controllers,Models,views,标准的MVC结构框架,但是有些时候我们写接口希望结构更加清晰而不 ...

  5. Javascript模式(第一章简介)------读书笔记

    一:模式 模式是一个通用问题的解决方案,可以提供一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 本书主要讨论如下三种类型的模式 1 设计模式:可复用面向对象软件的基础,包括singleto ...

  6. C# List 的一些操作 (两List元素是否想同,List是否包含在另一个List中)

    一. 假设有两个List<T>对象 ,List1和List2,如下方法判断两个List是否相等 List1.All(List2.Contains) && List1.Cou ...

  7. Ant OOM的问题

    ant 编译的问题 Android编译的有时候会报OOM的错误. 可能是Java的堆大小设置的问题 可在 ant.bat 脚本的  @echo off 语句后面添加: set ANT_OPTS=-Xm ...

  8. [系统集成] 部署 mesos-exporter 和 prometheus 监控 mesos task

    前几天我在mesos平台上基于 cadvisor部署了 influxdb 和 grafana,用于监控 mesos 以及 docker app 运行信息,发现这套监控系统不太适合 mesos + do ...

  9. 图片Exif 信息中Orientation的理解和对此的处理

    这个问题是在用七牛上传图片后获取宽高时发现的,一张图片,用图片浏览器打开始终是竖图,但是查看属性或者用七牛获取宽高,却发现宽大于高,也就是在属性中这是个横图.这样导致客户端用该宽高来展示图片会出现问题 ...

  10. SpringMVC中利用@InitBinder来对页面数据进行解析绑定

    同步发布:http://www.yuanrengu.com/index.php/springmvc-user-initbinder.html 在使用SpingMVC框架的项目中,经常会遇到页面某些数据 ...