HTML5出來已經好久了,然而因爲本人不是專業搞前端的,只知道有這個東西,具體概念有點模糊(其實就是一系列標準規範啦);所以去年(2015.11.09),專門對HTML5作了個簡單的小結,今天正好看到,整理一下放到個人博客,以避免丟失。有錯誤請指正。javascript
另外,轉載請註明連接http://www.cnblogs.com/chenpi/p/5578011.html,雖然內容比較簡單,但也是花了很多時間整理的。html
以下表格爲HTML 5標準演進歷程:前端
2012 planhtml5 |
2012java |
2013web |
2014chrome |
2015canvas |
2016跨域 |
HTML 5.0瀏覽器 |
候選版 |
徵求評價 |
推薦標準 |
||
HTML 5.1 |
第一工做草案 |
最後召集 |
候選版 |
推薦標準 |
|
HTML 5.2 |
第一工做草案 |
直到如今,仍然不存在一項旨在網頁上顯示視頻、音頻的標準,大多數經過插件(好比 Flash)來顯示的;
<video width="320" height="240" controls="controls"> <source src="/i/movie.ogg" type="video/ogg"> <source src="/i/movie.mp4" type="video/mp4"> Your browser does not support the video tag. </video>
<audio controls="controls"> <source src="/i/song.ogg" type="audio/ogg"> <source src="/i/song.mp3" type="audio/mpeg"> Your browser does not support the audio element. </audio>
以下,爲視頻和音頻的效果圖:
HTML5 的 canvas 元素使用 JavaScript 在網頁上繪製圖像,擁有多種繪製路徑、矩形、圓形、字符以及添加圖像的方法。
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"> Your browser does not support the canvas element. </canvas> <script type="text/javascript"> var c=document.getElementById("myCanvas"); var cxt=c.getContext("2d"); cxt.moveTo(10,10); cxt.lineTo(150,50); cxt.lineTo(10,50); cxt.stroke(); </script>
以下,爲效果圖:
可伸縮矢量圖形 (Scalable Vector Graphics)
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190"> <polygon points="100,10 40,180 190,60 10,60 160,180" style="fill:red;stroke:blue;stroke-width:3;fill-rule:evenodd;" /> </svg>
Canvas & SVG 的常見應用
使用canvas和SVG能夠實現不少小應用,特別是canvas,以下圖例子:
HTML5 的拖放將會把與用戶交互帶向另外一個等級,並將會對如何設計用戶交互產生重大影響。
主要的事件函數:Ondragstart()、Ondragover()、Ondrop();
以下爲一個代碼示例,將一個div拖放到另外一個div裏:
<script type="text/javascript"> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData("Text",ev.target.id); } function drop(ev) { ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); } </script> </head> <body> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"> <img src="/i/w3school_logo_black.gif" draggable="true" ondragstart="drag(event)" id="drag1" /> </div> <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
存儲的數據沒有時間限制;
<script type="text/javascript"> localStorage.lastname="Smith"; document.write("Last name: " + localStorage.lastname); </script>
當用戶關閉瀏覽器窗口後,數據會被刪除
<script type="text/javascript"> sessionStorage.lastname="Smith"; document.write(sessionStorage.lastname); </script>
web worker 是運行在後臺的 JavaScript,獨立於其餘腳本,不會影響頁面的性能(JS多線程工做解決方案)。
Web Worker的基本原理就是在當前javascript的主線程中,使用Worker類加載一個javascript文件來開闢一個新的線程,起到互不阻塞執行的效果,而且提供主線程和新線程之間數據交換的接口:postMessage,onmessage。
優點:異步執行復雜計算,不影響頁面的展現
以下爲一個求和的代碼示例:
<script> var w; function startWorker() { if (typeof (Worker) !== "undefined") { if (typeof (w) == "undefined") { w = new Worker("rs/demo_workers.js"); } w.onmessage = function(event) { document.getElementById("result").innerHTML = event.data; }; } else { document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Workers..."; } } function stopWorker() { w.terminate(); } </script>
demo_workers.js文件,其中的postMessage() 方法 ,用於向 HTML 頁面傳回一段消息。
var i=0; function timedCount() { i=i+1; postMessage(i); setTimeout("timedCount()",500); } timedCount();
服務端代碼:
public class SSE extends ActionSupport { private InputStream sseStream; public InputStream getSseStream() { return sseStream; } public String handleSSE() { System.out.println("Inside handleSSE() "); String result = "data: "+new Date().toString() + "\n\n"; sseStream = new ByteArrayInputStream(result.getBytes() ); System.out.println("Exiting handleSSE() "); return SUCCESS; } }
<action name="handleSSE" class="pichen.java.html5.test.SSE" method="handleSSE"> <result name="success" type="stream"> <param name="contentType">text/event-stream</param> <param name="inputName">sseStream</param> </result> </action>
客戶端代碼:
<p><output id="result">OUTPUT VALUE</output></p> <script> (function(global, window, document) { 'use strict'; function main() { window.addEventListener('DOMContentLoaded', contentLoaded); } function contentLoaded() { var result = document.getElementById('result'); var stream = new EventSource('handleSSE.action'); stream.onmessage=function(event){ var data = event.data+" by onmessage"; result.value = data; } } main(); })(this, window, window.document); </script>
下圖爲各個input元素的效果圖:
Input type |
IE |
Firefox |
Opera |
Chrome |
Safari |
autocomplete |
8.0 |
3.5 |
9.5 |
3.0 |
4.0 |
autofocus |
No |
No |
10.0 |
3.0 |
4.0 |
form |
No |
No |
9.5 |
No |
No |
form overrides |
No |
No |
10.5 |
No |
No |
height and width |
8.0 |
3.5 |
9.5 |
3.0 |
4.0 |
list |
No |
No |
9.5 |
No |
No |
min, max and step |
No |
No |
9.5 |
3.0 |
No |
multiple |
No |
3.5 |
No |
3.0 |
4.0 |
novalidate |
No |
No |
No |
No |
No |
pattern |
No |
No |
9.5 |
3.0 |
No |
placeholder |
No |
No |
No |
3.0 |
3.0 |
required |
No |
No |
9.5 |
3.0 |
No |
基於Phaser(開源的HTML5 2D遊戲開發框架),主要須要編寫如下三個函數:
Preload函數(執行一次):
Create函數(執行一次):
Update函數(每幀執行):
效果圖以下:
主要步驟:
效果圖:
維基百科
https://zh.wikipedia.org/wiki/HTML5
W3C官網,HTML5推薦標準
測試瀏覽器對HTML5支持狀況
HTML5應用及源碼
HTML5實例源碼
W3School
谷歌、百度