前言
什么是HTML5:HTML5 是下一代的HTML,将成为 HTML、XHTML 以及 HTML DOM 的新标准。今天来谈谈前端面试中基本上每次一面的时候都会被问到的一个问题,那就是html5的新特性。这个是学习前端必须掌握的基础知识。
新增的元素
html5新增了一些语义化更好的标签元素。
结构元素
其他元素
废除的元素
html5中废除了一些纯表现的元素,只有部分浏览器支持的元素还有一些会对可用性产生负面影响的元素。
纯表现元素
纯表现的元素就是那些可以用css替代的元素。basefont、big、center、font、s、strike、tt、u这些元素,他们的功能都是纯粹为页面展示服务的,html5提倡把页面展示性功能放在css样式表中统一处理,所以将这些元素废除,用css样式进行替代。
对可用性产生负面影响的元素
对于frameset元素、frame元素与noframes元素,由于frame框架对网页可用性存在负面影响,在html5中已不支持frame框架,只支持iframe框架,html5中同时将frameset、frame和noframes这三个元素废除。
只有部分浏览器支持的元素
对于applet、bgsound、blink、marquee等元素,由于只有部分浏览器支持,特别是bgsound元素以及marquee元素,只被IE支持,所以在html5中被废除。其中applet元素可由embed元素或object元素替代,bgsound元素可由audio元素替代,marquee可以由javascript编程的方式替代。
新增的API
Canvas API
上文提到的canvas元素可以为页面提供一块画布来展示图形。结合Canvas API,就可以在这块画布上动态生成和展示各种图形、图表、图像以及动画了。Canvas本质上是位图画布,不可缩放,绘制出来的对象不属于页面DOM结构或者任何命名空间。不需要将每个图元当做对象存储,执行性能非常好。
利用Canvas API进行绘图,首先要获取canvas元素的上下文,然后用该上下文中封装的各种绘图功能进行绘图。
<canvas id="canvas">替代内容</canvas><script> var canvas = document.getElementById('canvas'); var context =canvas.getContext("2d"); // 获取上下文 //设置纯色 context.fillStyle = "red"; context.strokeStyle = "blue"; // 实践表明在不设置fillStyle下的默认fillStyle为black context.fillRect(0, 0, 100, 100); // 实践表明在不设置strokeStyle下的默认strokeStyle为black context.strokeRect(120, 0, 100, 100);</script>
SVG
SVG是html5的另一项图形功能,它是一种标准的矢量图形,是一种文件格式,有自己的API。html5引入了内联SVG,使得SVG元素可以直接出现在html标记中。
<svg height=100 width=100><circle cx=50 cy=50 r=50 /></svg>
音频和视频
audio和video元素的出现让html5的媒体应用多了新选择,开发人员不必使用插件就能播放音频和视频。对于这两个元素,html5规范提供了通用、完整、可脚本化控制的API。
html5规范出来之前,在页面中播放视频的典型方式是使用Flash、QuickTime或者Windows Media插件往html中嵌入音频视频,相对这种方式,使用html5的媒体标签有两大好处。
<video src="video.webm" controls> <object data="videoplayer.swf" type="application/x-shockwave-flash"> <param name="movie" value="video.swf" /> </object> Your browser does not support HTML5 video.</video>
浏览器支持性检测
浏览器检测是否支持audio元素或者video元素最简单的方式是用脚本动态创建它,然后检测特定函数是否存在。
var hasVideo = !!(document.createElement('video').canPlayType);
Geolocation API
html5的Geolocation API(地理定位API),可以请求用户共享他们的位置。使用方法非常简单,如果用户同意,浏览器就会返回位置信息,该位置信息是通过支持html5地理定位功能的底层设备(如笔记本电脑或手机)提供给浏览器的。位置信息由纬度、经度坐标和一些其他元数据组成。
位置信息从何而来
Geolocation API不指定设备使用哪种底层技术来定位应用程序的用户。相反,它只是用于检索位置信息的API,而且通过该API检索到的数据只具有某种程度的准确性,并不能保证设备返回的位置是精确的。设备可以使用下列数据源:
使用方法
// 一次更新navigator.geolocation.getCurrentPosition(updateLocation, handleLocationEror);function updateLocation(position) { var latitude = position.coords.latitude; // 纬度 var longitude = position.coords.longitude; // 经度 var accuracy = position.coords.accuracy; // 准确度 var timestamp = position.coords.timestamp; // 时间戳}// 错误处理函数function handleLocationEror(error) { ....}// 重复更新navigator.geolocation.watchPosition(updateLocation, handleLocationEror);// 不再接受位置更新navigator.geolocation.clearWatch(watchId);
Communication API
跨文档消息传递
出于安全方面的考虑,运行在同一浏览器中的框架、标签页、窗口间的通信一直都受到了严格的限制。然而,现实中存在一些合理的让不同站点的内容能在浏览器内进行交互的需求。这种情形下,如果浏览器内部能提供直接的通信机制,就能更好地组织这些应用。
html5中引入了一种新功能,跨文档消息通信,可以确保iframe、标签页、窗口间安全地进行跨源通信。postMessage API为发送消息的标准方式,发送消息非常简单:
window.postMessage('Hello, world', 'http://www.example.com/');
接收消息时,仅需在页面中增加一个事件处理函数。当某个消息到达时,通过检查消息的来源来决定是否对这条消息进行处理。
window.addEventListener("message", messageHandler, true);function messageHandler(e) { switch(e.origin) { case "friend.example.com": // 处理消息 processMessage(e.data); break; default: // 消息来源无法识别 // 消息被忽略 }}
消息事件是一个拥有data(数据)和origin(源)属性的DOM事件。data属性是发送方传递的实际消息,而origin属性是发送来源。
XMLHttpRequest Level2
XMLHttpRequest API使得Ajax技术成为可能,作为XMLHttpRequest的改进版,XMLHttpRequest Level2在功能上有了很大的改进。主要两个方面:
跨源XMLHttpRequest
过去,XMLHttpRequest仅限于同源通信,XMLHttpRequest Level2通过CORS实现了跨源XMLHttpRequest。跨源HTTP请求包含一个Origin头部,它为服务器提供HTTP请求的源信息。
WebSockets API
WebSockets是html5中最强大的通信功能,它定义了一个全双工通信信道,仅通过Web上的一个Socket即可进行通信。
WebSockets握手
为了建立WebSockets通信,客户端和服务器在初始握手时,将HTTP协议升级到WebSocket协议。一旦连接建立成功,就可以在全双工模式下在客户端和服务器之间来回传递WebSocket消息。
WebSockets接口
除了对WebSockets协议定义外,该规范还同时定义了用于JavaScript应用程序的WebSocket接口。WebSockets接口的使用很简单。要连接远程主机,只需要新建一个WebSocket实例,提供希望连接的对端URL。
Forms API
新表单元素
未来的表单元素
新的表单特性和函数
placeholder
当用户还没输入值的时候,输入型控件可以通过placeholder特性向用户显示描述性说明或者提示信息。
<input name="name" placeholder="First and last name">
autocomplete
浏览器通过autocomplete特性能够知晓是否应该保存输入值以备将来使用。
autofocus
通过autofocus特性可以指定某个表单元素获得输入焦点,每个页面上只允许出现一个autofocus特性,如果设置了多个,则相当于未指定此行为。
spellcheck
可对带有文本内容的输入控件和textarea空间控制spellcheck属性。设置完后,会询问浏览器是否应该给出拼写检查结果反馈。spellcheck属性需要赋值。
list特性和datalist元素
通过组合使用list特性和datalist元素,开发人员能够为某个输入型控件构造一张选值列表。
<datalist id="contactList"> <option value="a@qq.com"></option> <option value="b@qq.com"></option></datalist><input type="email" id="contatcs" list="contactList">
min和max
通过设置min和max特性,可以将range输入框的数值输入范围限定在最低值和最高值之间。可以只设置一个,也可以两个都设置,也可以都不设置。
step
对于输入型控件,设置其step特性能够指定输入值递增或者递减的粒度。
required
一旦为某输入型控件设置了required特性,那么此项必填,否则无法提交表单。
拖放API
draggable属性
如果网页元素的draggable元素为true,这个元素就是可以拖动的。
<div draggable="true">Draggable Div</div>
拖放事件
拖动过程会触发很多事件,主要有下面这些:
draggableElement.addEventListener('dragstart', function(e) { console.log('拖动开始!');});
dataTransfer对象
拖动过程中,回调函数接受的事件参数,有一个dataTransfer属性,指向一个对象,包含与拖动相关的各种信息。
draggableElement.addEventListener('dragstart', function(event) { event.dataTransfer.setData('text', 'Hello World!');});
dataTransfer对象的属性有:
dataTransfer对象的方法有:
Web Workers API
Javascript是单线程的。因此,持续时间较长的计算,回阻塞UI线程,进而导致无法在文本框中填入文本,单击按钮等,并且在大多数浏览器中,除非控制权返回,否则无法打开新的标签页。该问题的解决方案是Web Workers,可以让Web应用程序具备后台处理能力,对多线程的支持性非常好。
但是在Web Workers中执行的脚本不能访问该页面的window对象,也就是Web Workers不能直接访问Web页面和DOM API。虽然Web Workers不会导致浏览器UI停止响应,但是仍然会消耗CPU周期,导致系统反应速度变慢。
Web Storage API
Web Storage是html5引入的一个非常重要的功能,可以在客户端本地存储数据,类似html4的cookie,但可实现功能要比cookie强大的多。
sessionStorage
sessionStorage将数据保存在session中,浏览器关闭数据就消失。
localStorage
localStorage则一直将数据保存在客户端本地,除非手动删除,否则一直保存。
不管是sessionStorage,还是localStorage,可使用的API相同,常用的有如下几个(以localStorage为例):
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对武林网的支持。
新闻热点
疑难解答