1、HTML5中与页面显示相关的API
在HTML5中,增加了几个与页面显示相关的API,其中一个是Page Visibility API
Page Visibility API 是指当页面变为最小化状态或者用户将浏览器标签切换到其他标签时会触发。
Page Visibility API的使用场合如下:
- 一个应用程序中具有多幅图片的幻灯片式的连续播放功能,当页面变为不可见状态(最小化状态或者将用户浏览器标签切换到其他标签时),图片停止播放,当页面变为可见状态时,图片继续播放。
- 在一个实时显示服务器端信息的应用程序中,当页面处于不可见状态(最小化状态或者将用户浏览器标签切换到其他标签时),停止定期向服务器端请求数据的处理,当页面变为可见状态,继续执行定期向服务器端请求数据的处理。
- 在一个具有播放视频功能的应用程序中,当页面处于不可见状态(最小化状态或者将用户浏览器标签切换到其他标签时),暂停播放视频,当页面变为可见状态时,继续播放视频。
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的更多相关文章
-
微信小程序开发过程中tabbar页面显示的相关问题及解决办法!
在微信小程序的开发过程中如果有使用过tabbar的同学,我相信一定会遇到一些困扰.为什么有些时候代码中明明已经在app.json里面增加了tabbar,可以页面中就是不显示呢?可不可以有些页面显示ta ...
-
用jquery将多个页面中相似页面显示到一个页面并实现来回跳转
今天遇到一个问题,客户说页面来回跳转太麻烦了,需要把相似的页面做到一个页面上去. 接下来说一下记录一下解决方法. 首先这是三个页面中相似的Div: <div class="wenti& ...
-
SpringMVC中JSP页面显示为源码
@RequestMapping(value = "login") public ModelAndView login(ModelAndView mav) throws Except ...
-
Jsp中操作页面显示
通常我们想改变网页中的显示可以用下面的方式. <script type="text/javascript">function show(){ document. ...
-
html5中让页面缩放的4种方法
1.viewport 这种方法,不是所有的浏览器都兼容<meta name="viewport" content="width=640,minimum-scale= ...
-
全栈JavaScript之路(十四)HTML5 中与class属性相关的扩充
1. getElementByClassName() :支持getElementsByClassName()方法的浏览器有IE 9+.Firefox 3+.Safari 3.1+.Chrome 和 O ...
-
关于HTML5中hash部分API在历史管理,选项卡自动跳转中的一点使用
在群里最近有人提到如何处理在页面跳转之后,想要直接定位到相对应的选项卡的选项上,比如首页有登录和注册两个按钮,而登录注册页面有一对选项卡分别对应的是登陆和注册,想要实现的功能是点击登陆去到登录页的登录 ...
-
html5中canvas的使用 获取鼠标点击页面上某点的RGB
1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script ...
-
使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍
一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...
随机推荐
-
【前端攻略】:玩转图片Base64编码
引言 图片处理在前端工作中可谓占据了很重要的一壁*.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 编码.标题略大,不过只是希望通过一些浅显 ...
-
TCP粘包/拆包问题
无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制. TCP粘包/拆包 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河 ...
-
javascript closure
http://www.jibbering.com/faq/notes/closures/ http://hi.baidu.com/bluedream_119/item/938dcd082b1e1880 ...
-
WEB组件之间的关系
WEB组件之间的关系: A:重定向的特点: 1:发生客户端 2:地址栏发生变化 3:两个WEB组件不共享request的数据. 4 重定向只能传递文本类型数据 服务端的方法:response.send ...
-
POJ1276:Cash Machine(多重背包)
Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...
-
js 切换图片
<html><head lang="en"> <meta charset="UTF-8"> <title>< ...
-
tmpfs使用探讨
一. 什么是tmpfs? tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储. 而且 ...
-
Codeforces 730 J.Bottles (01背包)
<题目链接> 题目大意: 有n个瓶子,各有水量和容量.现在要将这写瓶子里的水存入最少的瓶子里.问你最少需要的瓶子数?在保证瓶子数最少的情况下,要求转移的水量最少. 解题分析:首先,最少的瓶 ...
-
关于Android 8.0java.lang.SecurityException: Permission Denial错误的解决方法
背景 当我在Android 7.0及以下手机运行启动页,进行Activity跳转的时候,完美跳转到对应的目标Activity. 但当在Android 8.0及以上手机进行Activity跳转时,会爆如 ...
-
Ubuntu下将现有的文件打包成deb包
转自:http://www.linuxidc.com/Linux/2008-04/12297.htm deb是Debian Linux的软件包格式.一般来说是需要通过编译源码然后制作deb包,今天由于 ...