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

来源:互联网 发布:玩天龙八部网络延迟 编辑:程序博客网 时间:2024/05/01 05:25

原文地址: 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允许开发者让浏览器进入全屏模式,当然前提是得到用户的许可。

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

页面可见性API
当用户切换浏览器标签的时候,页面可见性API(Page Visibility API, http://davidwalsh.name/page-visibility )将触发一个事件,而开发者可以监听这个事件并做一些处理.
[javascript] view plaincopy
  1. // Adapted slightly from Sam Dutton  
  2. // Set name of hidden property and visibility change event  
  3. // since some browsers only offer vendor-prefixed support  
  4. var hidden, state, visibilityChange;   
  5. if (typeof document.hidden !== "undefined") {  
  6.   hidden = "hidden";  
  7.   visibilityChange = "visibilitychange";  
  8.   state = "visibilityState";  
  9. else if (typeof document.mozHidden !== "undefined") {  
  10.   hidden = "mozHidden";  
  11.   visibilityChange = "mozvisibilitychange";  
  12.   state = "mozVisibilityState";  
  13. else if (typeof document.msHidden !== "undefined") {  
  14.   hidden = "msHidden";  
  15.   visibilityChange = "msvisibilitychange";  
  16.   state = "msVisibilityState";  
  17. else if (typeof document.webkitHidden !== "undefined") {  
  18.   hidden = "webkitHidden";  
  19.   visibilityChange = "webkitvisibilitychange";  
  20.   state = "webkitVisibilityState";  
  21. }  
  22.   
  23. // Add a listener that constantly changes the title  
  24. document.addEventListener(visibilityChange, function(e) {  
  25.   // Start or stop processing depending on state  
  26.   
  27. }, false);  

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


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

[javascript] view plaincopy
  1. // Put event listeners into place  
  2. window.addEventListener("DOMContentLoaded"function() {  
  3.   // Grab elements, create settings, etc.  
  4.   var canvas = document.getElementById("canvas"),  
  5.     context = canvas.getContext("2d"),  
  6.     video = document.getElementById("video"),  
  7.     videoObj = { "video"true },  
  8.     errBack = function(error) {  
  9.       console.log("Video capture error: ", error.code);   
  10.     };  
  11.   
  12.   // Put video listeners into place  
  13.   if(navigator.getUserMedia) { // Standard  
  14.     navigator.getUserMedia(videoObj, function(stream) {  
  15.       video.src = stream;  
  16.       video.play();  
  17.     }, errBack);  
  18.   } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed  
  19.     navigator.webkitGetUserMedia(videoObj, function(stream){  
  20.       video.src = window.webkitURL.createObjectURL(stream);  
  21.       video.play();  
  22.     }, errBack);  
  23.   }  
  24. }, false);  

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


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

[javascript] view plaincopy
  1. // Get the battery!  
  2. var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery;  
  3.   
  4. // A few useful battery properties  
  5. console.warn("Battery charging: ", battery.charging); // true  
  6. console.warn("Battery level: ", battery.level); // 0.58  
  7. console.warn("Battery discharging time: ", battery.dischargingTime);  
  8.   
  9. // Add a few event listeners  
  10. battery.addEventListener("chargingchange"function(e) {  
  11.   console.warn("Battery charge change: ", battery.charging);  
  12. }, false);  
获取电池信息,那么web应用程序就可以根据电量来决定是否执行一些耗电的操作.这不是一个开创性的API,但肯定有很多用处。

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

[html] view plaincopy
  1. <!-- full page -->  
  2. <link rel="prefetch" href="http://blog.csdn.net/renfufei" />  
  3. <!-- just an image -->  
  4. <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之中调试出一些什么问题,很可能就是这个大小写的麻烦.

[html] view plaincopy
  1. <!DOCTYPE html>  
  2. <html>  
  3.  <head>  
  4.   <title> FullScreen API 演示</title>  
  5.   <meta name="Generator" content="EditPlus">  
  6.   <meta name="Author" content="renfufei@qq.com">  
  7.   <meta name="Description" content="http://davidwalsh.name/more-html5-apis">  
  8.   <script>  
  9.     // 处理全屏(需要全屏显示DOM元素)  
  10.     function launchFullScreen(element) {  
  11.       // 先检测最标准的方法  
  12.       if(element.requestFullScreen) {  
  13.         element.requestFullScreen();  
  14.       } else if(element.mozRequestFullScreen) {  
  15.         // 其次,检测Mozilla的方法  
  16.         element.mozRequestFullScreen();  
  17.       } else if(element.webkitRequestFullScreen) {  
  18.         // if 检测 webkit的API  
  19.         element.webkitRequestFullScreen();  
  20.       }  
  21.     };  
  22.     // 退出全屏,不用管具体是哪个元素,因为屏幕是唯一的。  
  23.     function cancelFullscreen() {  
  24.       if(document.cancelFullScreen) {  
  25.         document.cancelFullScreen();  
  26.       } else if(document.mozCancelFullScreen) {  
  27.         document.mozCancelFullScreen();  
  28.       } else if(document.webkitCancelFullScreen) {  
  29.         document.webkitCancelFullScreen();  
  30.       }  
  31.     };  
  32.     // 显示全屏信息  
  33.     function dumpFullscreen() {  
  34.         var d = document;  
  35.         var fullE = null;  
  36.         var fullEnable = "fullScreen is disable!";  
  37.         if(d.fullScreenElement){  
  38.             fullE = d.fullScreenElement;  
  39.         } else if(d.mozFullScreenElement){  
  40.             // 如果有问题,把mozFullscreenElement 改为 mozFullScreenElement,S大写  
  41.             fullE = d.mozFullScreenElement;  
  42.         } else if(d.webkitFullscreenElement){  
  43.             // 本人的为chrome, Fullscreen 之中,s为小写。  
  44.             fullE = d.webkitFullscreenElement;  
  45.         }  
  46.         // 如果有问题,请切换 fullScreen 中 s 的大小写。  
  47.         if(d.fullScreenEnabled){  
  48.             fullEnable = d.fullScreenEnabled;  
  49.         } else if(d.mozFullScreenEnabled){  
  50.             fullEnable = d.mozFullScreenEnabled;  
  51.         } else if(d.webkitFullscreenEnabled){  
  52.             // 注意 Fullscreen 的中间s大小写  
  53.             fullEnable = d.webkitFullscreenEnabled;  
  54.         }  
  55.         //  
  56.         if(window.console){  
  57.             console.dir(fullE);  
  58.         } else if(fullE){  
  59.             alert(fullE.tagName);  
  60.         } else {  
  61.             alert("全屏元素是:"+fullE);  
  62.         }  
  63.         //  
  64.         if(window.console){  
  65.             console.info("允许全屏:"+fullEnable);  
  66.         } else if(fullEnable){  
  67.             alert("允许全屏:"+fullEnable);  
  68.         } else {  
  69.             alert("允许全屏:"+fullEnable);  
  70.         }  
  71.     };  
  72.     // 设置事件监听,DOM内容加载完成,和jQuery的$.ready() 效果差不多。  
  73.     window.addEventListener("DOMContentLoaded", function() {  
  74.         // 获取DOM元素  
  75.         var enterfull = document.getElementById("enterfull");  
  76.         var quitfull = document.getElementById("quitfull");  
  77.         var dumpfull = document.getElementById("dumpfull");  
  78.               
  79.         // 事件监听  
  80.         enterfull.addEventListener("click", function() {  
  81.             //   
  82.             launchFullScreen(document.documentElement);  
  83.         });  
  84.         quitfull.addEventListener("click", function() {  
  85.             //   
  86.             cancelFullscreen();  
  87.         });  
  88.         dumpfull.addEventListener("click", function() {  
  89.             //   
  90.             dumpFullscreen();  
  91.         });  
  92.   
  93.     }, false);  
  94.     // 全屏事件Events  
  95.     document.addEventListener("fullscreenchange", function(e) {  
  96.       console.dir(e);  
  97.     });  
  98.     document.addEventListener("mozfullscreenchange", function(e) {  
  99.       console.dir(e);  
  100.     });  
  101.     document.addEventListener("webkitfullscreenchange", function(e) {  
  102.       console.dir(e);  
  103.     });  
  104.   </script>  
  105.  </head>  
  106.   
  107.  <body>  
  108.     
  109.     <div>  
  110.         <button id="enterfull">进入全屏</button><br/>  
  111.         <button id="quitfull">退出全屏</button><br/>  
  112.         <button id="dumpfull"> 查看全屏的DOM元素</button><br/>  
  113.     </div>  
  114.  </body>  
  115. </html>  
0 0
原创粉丝点击