另5个你不知道的HTML5接口API

简介: 原文地址: 5 More HTML5 APIs You Didn’t Know Existed 演示地址:全屏API Demo 原文日期: 2012年11月08日 翻译日期: 2013年08月13日 HTML5 已经给我们提供了许多好用的JavaScript以及HTML API.其中一些是我们期待了许多年的,而另外一些是为移动和桌面开发者准备的。

原文地址: 5 More HTML5 APIs You Didn’t Know Existed

演示地址: 全屏API Demo
原文日期: 2012年11月08日
翻译日期: 2013年08月13日

HTML5 已经给我们提供了许多好用的JavaScript以及HTML API.其中一些是我们期待了许多年的,而另外一些是为移动和桌面开发者准备的。不管这些API出于什么目的而推出,只要能帮我们更好地完成工作就是“好猫”。
前几天我发表了一篇名为: 5个你不知道的HTML5的接口的博文,希望能帮您更好地开发web应用。今天我将为您介绍另外5个少为人知的HTML5 API—— 希望您能发现他们的用途!

全屏API
强大的全屏API允许开发者让浏览器进入全屏模式,当然前提是得到用户的许可。

	// 处理全屏(需要全屏显示DOM元素)
	function launchFullScreen(element) {
	  // 先检测最标准的方法
	  if(element.requestFullScreen) {
		element.requestFullScreen();
	  } else if(element.mozRequestFullScreen) {
		// 其次,检测Mozilla的方法
		element.mozRequestFullScreen();
	  } else if(element.webkitRequestFullScreen) {
		// if 检测 webkit的API
		element.webkitRequestFullScreen();
	  }
	};
// Launch fullscreen for browsers that support it!
launchFullScreen(document.documentElement); // the whole page
launchFullScreen(document.getElementById("videoElement")); // any individual element
任意的DOM元素都可以切换至全屏状态,甚至CSS伪类还可以控制全屏模式下的不同样式。这个API特别适合JavaScript游戏的开发,尤其是像 BananaBread这样的第一人称射击游戏!

页面可见性API
当用户切换浏览器标签的时候,页面可见性API(Page Visibility API, http://davidwalsh.name/page-visibility )将触发一个事件,而开发者可以监听这个事件并做一些处理.
// Adapted slightly from Sam Dutton
// Set name of hidden property and visibility change event
// since some browsers only offer vendor-prefixed support
var hidden, state, visibilityChange; 
if (typeof document.hidden !== "undefined") {
  hidden = "hidden";
  visibilityChange = "visibilitychange";
  state = "visibilityState";
} else if (typeof document.mozHidden !== "undefined") {
  hidden = "mozHidden";
  visibilityChange = "mozvisibilitychange";
  state = "mozVisibilityState";
} else if (typeof document.msHidden !== "undefined") {
  hidden = "msHidden";
  visibilityChange = "msvisibilitychange";
  state = "msVisibilityState";
} else if (typeof document.webkitHidden !== "undefined") {
  hidden = "webkitHidden";
  visibilityChange = "webkitvisibilitychange";
  state = "webkitVisibilityState";
}

// Add a listener that constantly changes the title
document.addEventListener(visibilityChange, function(e) {
  // Start or stop processing depending on state

}, false);

如果使用恰当,在当前标签页不可见的时候,可以暂停一些消耗资源的任务(比如Ajax定时刷新,或者动画效果).


获取多媒体资源API
getUserMedia API 非常的有趣,这个API允许访问媒体设备,比如笔记本的摄像头。通过这个API以及<video>,<canvas>标签,就可以 通过浏览器来拍摄 你漂亮的照片.

// Put event listeners into place
window.addEventListener("DOMContentLoaded", function() {
  // Grab elements, create settings, etc.
  var canvas = document.getElementById("canvas"),
    context = canvas.getContext("2d"),
    video = document.getElementById("video"),
    videoObj = { "video": true },
    errBack = function(error) {
      console.log("Video capture error: ", error.code); 
    };

  // Put video listeners into place
  if(navigator.getUserMedia) { // Standard
    navigator.getUserMedia(videoObj, function(stream) {
      video.src = stream;
      video.play();
    }, errBack);
  } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
    navigator.webkitGetUserMedia(videoObj, function(stream){
      video.src = window.webkitURL.createObjectURL(stream);
      video.play();
    }, errBack);
  }
}, false);

期待在几年内有更多的应用通过浏览器和用户进行交互。


电池电量 API
电池电量 API 显然是用来查看移动设备电池电量等状态信息的:

// Get the battery!
var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery;

// A few useful battery properties
console.warn("Battery charging: ", battery.charging); // true
console.warn("Battery level: ", battery.level); // 0.58
console.warn("Battery discharging time: ", battery.dischargingTime);

// Add a few event listeners
battery.addEventListener("chargingchange", function(e) {
  console.warn("Battery charge change: ", battery.charging);
}, false);
获取电池信息,那么web应用程序就可以根据电量来决定是否执行一些耗电的操作.这不是一个开创性的API,但肯定有很多用处。

链接预加载API
Link prefetching 允许网站在后台默默地预加载一些资源以便用户体验更顺畅。

<!-- full page -->
<link rel="prefetch" href="http://blog.csdn.net/renfufei" />
<!-- just an image -->
<link rel="prefetch" href="http://avatar.csdn.net/4/9/C/1_renfufei.jpg" />
上面所介绍的5个API在未来几年肯定会得到广泛的应用,所以你越快熟悉他们,那你的Web应用程序就会抢占先机。花一些时间来深入研究这些API并尝试着集成到你的app中吧!

其中,全屏API的示例代码:

说明: 在webkit中,直接是document相关的属性,那么 “Fullscreen”之中的screen全是小写的,而document.documentElement 则大小写均可,这是怪异的一个地方.另外,如果是一个方法,那么"FullScreen"中的S是大写的,这是一个诡异的不一致的地方,很可能是苹果时期的webkit遗留下来的bug。示例代码如下,在chrome之中调试通过,如果在IE或者Firefox之中调试出一些什么问题,很可能就是这个大小写的麻烦.

<!DOCTYPE html>
<html>
 <head>
  <title> FullScreen API 演示</title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="renfufei@qq.com">
  <meta name="Description" content="http://davidwalsh.name/more-html5-apis">
  <script>
	// 处理全屏(需要全屏显示DOM元素)
	function launchFullScreen(element) {
	  // 先检测最标准的方法
	  if(element.requestFullScreen) {
		element.requestFullScreen();
	  } else if(element.mozRequestFullScreen) {
		// 其次,检测Mozilla的方法
		element.mozRequestFullScreen();
	  } else if(element.webkitRequestFullScreen) {
		// if 检测 webkit的API
		element.webkitRequestFullScreen();
	  }
	};
	// 退出全屏,不用管具体是哪个元素,因为屏幕是唯一的。
	function cancelFullscreen() {
	  if(document.cancelFullScreen) {
		document.cancelFullScreen();
	  } else if(document.mozCancelFullScreen) {
		document.mozCancelFullScreen();
	  } else if(document.webkitCancelFullScreen) {
		document.webkitCancelFullScreen();
	  }
	};
	// 显示全屏信息
	function dumpFullscreen() {
		var d = document;
		var fullE = null;
		var fullEnable = "fullScreen is disable!";
		if(d.fullScreenElement){
			fullE = d.fullScreenElement;
		} else if(d.mozFullScreenElement){
			// 如果有问题,把mozFullscreenElement 改为 mozFullScreenElement,S大写
			fullE = d.mozFullScreenElement;
		} else if(d.webkitFullscreenElement){
			// 本人的为chrome, Fullscreen 之中,s为小写。
			fullE = d.webkitFullscreenElement;
		}
		// 如果有问题,请切换 fullScreen 中 s 的大小写。
		if(d.fullScreenEnabled){
			fullEnable = d.fullScreenEnabled;
		} else if(d.mozFullScreenEnabled){
			fullEnable = d.mozFullScreenEnabled;
		} else if(d.webkitFullscreenEnabled){
			// 注意 Fullscreen 的中间s大小写
			fullEnable = d.webkitFullscreenEnabled;
		}
		//
		if(window.console){
			console.dir(fullE);
		} else if(fullE){
			alert(fullE.tagName);
		} else {
			alert("全屏元素是:"+fullE);
		}
		//
		if(window.console){
			console.info("允许全屏:"+fullEnable);
		} else if(fullEnable){
			alert("允许全屏:"+fullEnable);
		} else {
			alert("允许全屏:"+fullEnable);
		}
	};
	// 设置事件监听,DOM内容加载完成,和jQuery的$.ready() 效果差不多。
	window.addEventListener("DOMContentLoaded", function() {
		// 获取DOM元素
		var enterfull = document.getElementById("enterfull");
		var quitfull = document.getElementById("quitfull");
		var dumpfull = document.getElementById("dumpfull");
			
		// 事件监听
		enterfull.addEventListener("click", function() {
			// 
			launchFullScreen(document.documentElement);
		});
		quitfull.addEventListener("click", function() {
			// 
			cancelFullscreen();
		});
		dumpfull.addEventListener("click", function() {
			// 
			dumpFullscreen();
		});

	}, false);
	// 全屏事件Events
	document.addEventListener("fullscreenchange", function(e) {
	  console.dir(e);
	});
	document.addEventListener("mozfullscreenchange", function(e) {
	  console.dir(e);
	});
	document.addEventListener("webkitfullscreenchange", function(e) {
	  console.dir(e);
	});
  </script>
 </head>

 <body>
  
	<div>
		<button id="enterfull">进入全屏</button><br/>
		<button id="quitfull">退出全屏</button><br/>
		<button id="dumpfull"> 查看全屏的DOM元素</button><br/>
	</div>
 </body>
</html>

目录
相关文章
|
19小时前
|
安全 API 开发者
智能体-Agent能力升级!新增Assistant API & Tools API服务接口
ModelScope-Agent是一个交互式创作空间,它支持LLM(Language Model)的扩展能力,例如工具调用(function calling)和知识检索(knowledge retrieval)。它已经对相关接口进行了开源,以提供更原子化的应用LLM能力。用户可以通过Modelscope-Agent上的不同代理(agent),结合自定义的LLM配置和消息,调用这些能力。
|
4天前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
11天前
|
移动开发 API UED
【专栏:HTML进阶篇】HTML5拖放API与触摸事件
【4月更文挑战第30天】HTML5的拖放API和触摸事件增强了网页交互设计,使开发者能创建动态响应式界面。拖放API通过设定元素的`draggable`属性、监听拖动和放置事件以及处理`DataTransfer`对象实现。触摸事件如`touchstart`、`touchmove`、`touchend`则让触控设备操作更流畅。开发者需注意事件对象、多点触控处理和防止默认行为。结合两者,可创建图片排序、手势识别等交互功能,但也需面对浏览器兼容性和复杂逻辑挑战。利用HTML5这些工具,能提升用户体验,推动网页交互设计创新。
|
12天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
23 1
|
12天前
|
SQL 数据管理 API
数据管理DMS产品使用合集之阿里云DMS提供API接口来进行数据导出功能吗
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
13天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里函数计算中开启函数计算 API 接口如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
111 6
|
15天前
|
前端开发 Java 测试技术
IDEA 版 API 接口神器来了,一键生成文档,贼香!
IDEA 版 API 接口神器来了,一键生成文档,贼香!
45 0
|
16天前
|
API 开发者
邮件API接口使用的方法和步骤
AOKSEND指南:了解和使用邮件API接口,包括选择适合的接口(如AOKSEND、Mailgun、SMTP),获取访问权限,配置发件人、收件人及邮件内容,调用接口发送邮件,并处理返回结果,以高效集成邮件功能。
|
19天前
|
Java API Android开发
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
13 0
|
20天前
|
XML JSON API
api接口的使用原理是什么?
总之,API接口的使用原理基于协议、规范和约定,允许不同的应用程序或系统之间进行通信和交互。这种通信方式使得开发人员能够轻松地利用外部服务或资源,从而实现更丰富的功能和服务。
15 0