转载

你可能不知道的10个HTML5新功能

Element.classList

classList API 提供了我们多年来一种使用JavaScript工具库来实现的控制CSS的基本功能:

// 增加一个CSS类 myElement.classList.add("newClass");  // 删除一个CSS类 myElement.classList.remove("existingClass");  // 检查是否拥有一个CSS类 myElement.classList.contains("oneClass");  // 反转一个CSS类的有无 myElement.classList.toggle("anotherClass"); 

这个新出现的API的主要价值体现就是:简单实用。 读一下这篇文章 ,里面介绍了其它几个classList功能特征。

ContextMenu API

这个新的 ContextMenu API 非常的有用:它并不会替换原有的右键菜单,而是将你的自定义右键菜单添加到浏览器的右键菜单里:

<section contextmenu="mymenu">    <!-- 添加菜单 -->   <menu type="context" id="mymenu">       <menuitem label="Refresh Post" onclick="window.location.reload();" icon="/images/refresh-icon.png"></menuitem>       <menu label="Share on..." icon="/images/share_icon.gif">         <menuitem label="Twitter" icon="/images/twitter_icon.gif" onclick="goTo('//twitter.com/intent/tweet?text=' + document.title + ':  ' + window.location.href);"></menuitem>         <menuitem label="Facebook" icon="/images/facebook_icon16x16.gif" onclick="goTo('//facebook.com/sharer/sharer.php?u=' + window.location.href);"></menuitem>       </menu>     </menu> </section> 

需要注意的是,最好使用JavaScript动态的创建这些菜单代码,因为菜单事件最终要调用JavaScript执行任务,如果用户禁止了JavaScript,右键菜单也不会生成,他同时也不会看到菜单。

Element.dataset

使用 dataset API ,程序员可以方便的获取或设置 data-* 自定义属性:

/*  以下面的代码为例  <div id="myDiv" data-name="myDiv" data-id="myId" data-my-custom-key="This is the value"></div> */ // 获取元素 var element = document.getElementById("myDiv"); // 获取id var id = element.dataset.id; // 读取 "data-my-custom-key" 的值 var customKey = element.dataset.myCustomKey; // 修改成其它值 element.dataset.myCustomKey = "Some other value";  // 结果是:  // <div id="myDiv" data-name="myDiv" data-id="myId" data-my-custom-key="Some other value"></div>  

无需多说,跟classList一样,简单实用

window.postMessage API

即使是IE8也对 postMessage API 支持多年了, postMessage API 的功能是可以让你在两个浏览器窗口或iframe之间传递信息数据:

// 从A域上的窗口或iframe,发送一条信息到B域中的窗口或ifame var iframeWindow = document.getElementById("iframe").contentWindow; iframeWindow.postMessage("来自第一个窗口的问候!"); // 在第二个不同域上的窗口或iframe接收消息 window.addEventListener("message", function(event) {  // 检验域的合法性  if(event.origin == "http://www.webhek.com") {   // 输出日志信息   console.log(event.data);   // 反馈消息   event.source.postMessage("你也好吗!");  } ]);  

消息体只能是字符串,但你可以用JSON.stringify和JSON.parse将消息转换成更有意义的数据体!

autofocus属性

autofocus属性 能够让 BUTTON , INPUT , 或 TEXTAREA 元素在页面加载完成时自动成为页面焦点:

<input autofocus="autofocus" /> <button autofocus="autofocus">Hi!</button> <textarea autofocus="autofocus"></textarea> 

在像谷歌搜索页面那样的有固定模式的地方, autofocus属性 是最理想的一个功能。

浏览器对各个API的支持稍有不同,所以,在使用前先检查一下对这些特征的支持情况。再花点时间阅读一下各个API的详细说明,相信你会有更多的发现。

全屏API接口

强大的 全屏API接口 能让程序员通过编程启动浏览器进入全屏模式,并请求用户的允许:

// Find the right method, call on correct element function launchFullScreen(element) {   if(element.requestFullScreen) {     element.requestFullScreen();   } else if(element.mozRequestFullScreen) {     element.mozRequestFullScreen();   } else if(element.webkitRequestFullScreen) {     element.webkitRequestFullScreen();   } }  // Launch fullscreen for browsers that support it! launchFullScreen(document.documentElement); // the whole page launchFullScreen(document.getElementById("videoElement")); // any individual element 

任何页面元素都可以成为全屏输出的目标,HTML5里甚至还提供了一个CSS伪类来让程序员在浏览器全屏时控制全屏元素的样式。当你在开发游戏时这个全屏API接口特别有用;尤其像 BananaBread 这样的枪击游戏中。

阅读教程

页面可见性API接口

页面可见性API接口 提供给用了一个监听事件,这个事件能告诉程序员当前页面是否是用浏览器中激活的标签页/窗口、是否是用户正在观看的页面,它还能告诉程序员用户何时切换页面、不再观看本页面/窗口:

// 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); 

阅读教程

观看演示

getUserMedia接口API

getUserMedia 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); 

你一定要在以后的应用中试试这个HTML5新功能,通过浏览器进行各种各样的交互的技术已经越来越流行了!

阅读教程

观看演示

电池接口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); 

这些HTML5提供的电池接口API能直接将电池电量状态告诉web应用,而不需要借助电池传感器或第三方应用。虽然不是一个特别大的功能,但绝对是一个有用的接口。

阅读教程

观看演示

页面预加载(Link prefetch)API

页面预加载(Link prefetch)API 功能能够让浏览器在后台静悄悄的预先加载/读取一些页面或资源到当前页面,给用户一个顺滑的使用体验:

<!-- 预加载一个页面 --> <link rel="prefetch" href="http://www.webhek.com/link-prefetch/" />  <!-- 预加载一个图片 --> <link rel="prefetch" href="http://www.webhek.com/wordpress/wp-content/themes/webhek2/images/follow-us.jpg" /> 

阅读教程

就是这5个你需要知道和尝试的新HTML5 API。请注意,这些新功能在几年之内就会流行起来,所以,越早接受这些API,你就能更好的创造出最前沿技术的Web应用。花几分钟试试这些新功能,看看你能用它们实现什么样的效果!

本文合并了 《 你不知道的5个HTML5新功能 》和《 你不知道的5个HTML5新功能(第二辑) 》

正文到此结束
Loading...