1. 程式人生 > >html5 (逆天的html)

html5 (逆天的html)

text while 因特網 清除 ofo 服務 pla 體驗 圖像

簡介

h5的新特性:

cavas / video / audio / cache / element / form

最小的h5文檔:

<!DOCTYPE html>

<html>

<head>

<title>文檔標題</title>

</head>

<body>

文檔內容...

</body>

</html>

8個語義元素:

header, section, footer, aside, nav, main, article, figure

IE瀏覽器兼容方案: 引入 html5shiv

<script

src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>

cavas, 用JS繪制圖形

示例:

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">

</canvas>

<script>

var c=document.getElementById("myCanvas");

var ctx=c.getContext("2d");

ctx.fillStyle="#FF0000";

ctx.fillRect(0,0,150,75);

</script>

參考手冊: http://www.shouce.ren/api/view/a/654

svg, 用 XML 描述 2D 圖形

示例:

<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:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;">

</svg>

與cavas比較:

不依賴分辨率;

支持事件處理器;

適合大型渲染區域;

不適合遊戲應用‘

drag, 拖放元素

示例: http://www.shouce.ren/study/api/s/2992

geolocation, 地理定位

h5新元素

參考手冊: http://www.shouce.ren/api/view/a/1509

video/audio

input類型

新增的輸入類型:

color、date、datetime、email、month、number、range、

search、tel、time、url、week

參考手冊: http://www.shouce.ren/api/view/a/312

新表單元素

datalist: 規定輸入域的選項列表

<input list="browsers">

<datalist id="browsers">

<option value="Internet Explorer">

<option value="Firefox">

<option value="Chrome">

<option value="Opera">

<option value="Safari">

</datalist>

keygen: 提供一種驗證用戶的可靠方法

<form action="demo_keygen.php" method="get">

用戶名: <input type="text" name="usr_name">

加密: <keygen name="security">

<input type="submit">

</form>

output: 不同類型的輸出, 比如計算或腳本輸出

<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0

<input type="range" id="a" value="50"> 100

+ <input type="number" id="b" value="50">

= <output name="x" for="a b"></output>

</form>

表單屬性

一、form屬性

autocomplete: on或off, 表示自動完成

novalidate: 布爾值, 表示提交時不驗證表單

二、input屬性

autofocus

布爾值, 設置此域自動獲得焦點

form

規定此域所屬的一個或多個表單

formaction

規定此域提交表單的URL地址 (會覆蓋form元素的action屬性; 與type=submit一起使用)

formenctype

規定表單提交到服務器的數據編碼 (只對method=post有效; 會覆蓋form元素的enctype屬性; 與type=submit一起使用)

formmethod

規定表單提交的方式 (會覆蓋form元素的method屬性; 與type=submit一起使用)

formnovalidate

布爾值, 規定表單在提交時無需被驗證 (會覆蓋form元素的novalidate屬性; 與type=submit一起使用)

formtarget

規定提交表單後的展示方式 (會覆蓋form元素的target屬性; 與type=submit一起使用)

width / height

規定圖像的寬度和高度 (只用於type=image)

list

規定輸入域的datalist (詳見: 新表單元素 > datalist)

min / max

規定此域的最小和最大值 (只用於date/number/range標簽)

multiple

布爾值, 規定此域可選擇多個值 (只用於email/file)

pattern

定義一個正則表達式用來驗證此域的值 (只用於 text, search, url, tel, email, 和 password)

placeholder

描述此域所期待的值, 即提示用戶應該輸入什麽

required

布爾值, 規定此域不能為空值

step

規定合法的數字間隔 (只用於 number, range, date, datetime, datetime-local, month, time 和 week)

語義元素

6個元素, 一幅圖足以了解:

技術分享

figure: 表示獨立的流內容 (圖像、圖表、照片、代碼等)

figcaption: 定義 <figure> 元素的標題.

示例代碼:

<figure>

<img src="img111.jpg" width="30">

<figcaption>Anything</figcaption>

</figure>

web存儲

localStorage: 沒有時間限制的數據存儲, 只要不刪除將會一直存在

sessionStorage: 針對一個session的數據存儲, 瀏覽器關閉後此數據立即被清除

數據以鍵值對進行存儲!!

檢查瀏覽器是否支持:

if(typeof(Storage)!=="undefined"){

//yes...

} else {

//no...

}

示例:

localStorage.lastname="Smith";

應用程序緩存

作用: 緩存web應用, 當在沒有因特網連接時仍然可以進行訪問.

優勢:

1. 離線瀏覽

2. 訪問速度

3. 減少服務器負載

用法:

1. 在文檔的<html> 標簽中包含 manifest 屬性

2. manifest文件擴展名建議是: .appcache

3. mainfest是簡單的文本文件: 告知瀏覽器應該要/不要緩存哪些內容

示例:

demo.html

<!DOCTYPE HTML>

<html manifest="demo.appcache">

...

</html>

demo.appcache

CACHE MANIFEST

/theme.css

/logo.gif

NETWORK:

login.php

FALLBACK:

/html/ /offline.html

示例解釋:

1. 可以 * 代表所有文件

2. NETWORK 規定不緩存的文件

3. FALLBACK 規定離線時, 用offline.html替代 html 目錄中的所有文件

4. 以 "#" 開頭的是註釋行

5. 第一行 CACHE MAINFEST 後面沒有冒號

緩存效果:

技術分享

web worker

運行在後臺的 JavaScript

最佳使用場景:

1. 執行一些開銷較大的數據處理或計算任務;

2. worker會在後臺另外開辟一個線程來執行js代碼 (因為js計算過程中, 不能響應UI, 這樣會對用戶體驗造成很大影響).

worker線程分為兩種:

dedicated worker 和 shared worker, 可在chrome調試器中查看

技術分享

示例代碼:

Main線程代碼

<!DOCTYPE html>

<html>

<head>

<title></title>

<script src=‘//lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js‘></script>

<script>

$(function(){

$("#btn").click(function(){

var worker = new Worker("work.js");

worker.addEventListener("message", function(e){

console.log(e.data);

}, false);

worker.postMessage(3000);

});

});

</script>

</head>

<body>

<form>

<input type="button" id="btn" value="Start Processing"/>

</form>

</body>

</html>

work.js代碼

addEventListener("message", function(e){

var date = new Date();

var d = null;

do {

d = new Date();

} while ( d - date < e.data )

postMessage(d); //三秒鐘後返回信息

}, false);

技術分享

error事件:

worker.addEventListener("error", function(evt){

alert("Line #" + evt.lineno + " - " + evt.message + " in " + evt.filename);

}, false);

終止worker:

worker.terminate();

優化worker:

1. 把參數進行序列號, work.postMessage(JSON.stringify(data));

2. 采用二進制的存儲方式

var imageData = context.createImageData(img.width, img.height);

var int8s = new Int8Array(imageData.data);

server-sent event

服務器發送事件, 即網頁自動獲取服務器的更新.

示例代碼:

index.html

<!DOCTYPE html>

<html>

<head>

<title></title>

<script src=‘//lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js‘></script>

<script>

$(function(){

if (typeof(EventSource) !== "undefined") {

var source = new EventSource("sse.php");

source.addEventListener("message", function(event){

document.getElementById("result").innerHTML += event.data + "<br>";

}, false);

} else {

//sorry.

}

});

</script>

</head>

<body>

<div id=‘result‘></div>

</body>

</html>

sse.php

<?php

header(‘Content-Type: text/event-stream‘);

header(‘Cache-Control: no-cache‘);

header(‘Connection: keep-alive‘);

$time = time();

echo "data: The server time is: {$time}\n\n";

flush();

?>

技術分享

web sql

h5數據庫操作

示例代碼:

<script type = "text/javascript" >

var db = openDatabase(‘mydb‘, ‘1.0‘, ‘Test DB‘, 2 * 1024 * 1024);

var msg;

db.transaction(function(tx) {

tx.executeSql(‘CREATE TABLE IF NOT EXISTS LOGS (id unique, log)‘);

tx.executeSql(‘INSERT INTO LOGS (id, log) VALUES (1, "foobar")‘);

tx.executeSql(‘INSERT INTO LOGS (id, log) VALUES (2, "logmsg")‘);

msg = ‘<p>Log message created and row inserted.</p>‘;

document.querySelector(‘#status‘).innerHTML = msg;

});

db.transaction(function(tx) {

tx.executeSql(‘SELECT * FROM LOGS‘, [],

function(tx, results) {

var len = results.rows.length,

i;

msg = "<p>Found rows: " + len + "</p>";

document.querySelector(‘#status‘).innerHTML += msg;

for (i = 0; i < len; i++) {

msg = "<p><b>" + results.rows.item(i).log + "</b></p>";

document.querySelector(‘#status‘).innerHTML += msg;

}

},

null);

});

</script>

;

html5 (逆天的html)