Html5學習系列

Html5學習系列

 

 

HTML5 規定了一種經過 video 元素來包含視頻的標準方法

 

Ogg = 帶有 Theora 視頻編碼和 Vorbis 音頻編碼的 Ogg 文件javascript

 

MPEG4 = 帶有 H.264 視頻編碼和 AAC 音頻編碼的 MPEG 4 文件php

 

WebM = 帶有 VP8 視頻編碼和 Vorbis 音頻編碼的 WebM 文件html

 

如需在 HTML5 中顯示視頻,您全部須要的是:

<video src="movie.ogg" controls="controls">java

</video>git

control 屬性供添加播放、暫停和音量控件。web

 

 

HTML5 規定了一種經過 audio 元素來包含音頻的標準方法。

 

audio 元素可以播放聲音文件或者音頻流。canvas

 

<audio> 與 </audio> 之間插入的內容是供不支持 audio 元素的瀏覽器顯示的:瀏覽器

 

實例緩存

 

<audio src="song.ogg" controls="controls">服務器

Your browser does not support the audio tag.

</audio>

 

 

HTML5 拖放實例

 

 

設置元素爲可拖放

 

首先,爲了使元素可拖動,把 draggable 屬性設置爲 true :

 

<img draggable="true" />

 

 

拖動什麼 - ondragstart 和 setData()

 

而後,規定當元素被拖動時,會發生什麼。

 

在上面的例子中,ondragstart 屬性調用了一個函數,drag(event),它規定了被拖動的數據。

 

dataTransfer.setData() 方法設置被拖數據的數據類型和值:

 

function drag(ev)

{

ev.dataTransfer.setData("Text",ev.target.id);

}

 

在這個例子中,數據類型是 "Text",值是可拖動元素的 id ("drag1")。

 

 

 

放到何處 - ondragover

 

ondragover 事件規定在何處放置被拖動的數據。

 

默認地,沒法將數據/元素放置到其餘元素中。若是須要設置容許放置,咱們必須阻止對元素的默認處理方式。

 

這要經過調用 ondragover 事件的 event.preventDefault() 方法:

 

event.preventDefault()

 

 

 

進行放置 - ondrop

 

當放置被拖數據時,會發生 drop 事件。

 

在上面的例子中,ondrop 屬性調用了一個函數,drop(event):

 

function drop(ev)

{

ev.preventDefault();

var data=ev.dataTransfer.getData("Text");

ev.target.appendChild(document.getElementById(data));

}

 

代碼解釋:

 

    調用 preventDefault() 來避免瀏覽器對數據的默認處理(drop 事件的默認行爲是以連接形式打開)

    經過 dataTransfer.getData("Text") 方法得到被拖的數據。該方法將返回在 setData() 方法中設置爲相同類型的任何數據。

    被拖數據是被拖元素的 id ("drag1")

    把被拖元素追加到放置元素(目標元素)中

 

 

 

HTML5 的 canvas 元素使用 JavaScript 在網頁上繪製圖像

 

建立 Canvas 元素

向 HTML5 頁面添加 canvas 元素。

規定元素的 id、寬度和高度:

<canvas id="myCanvas" width="200" height="100"></canvas>

經過 JavaScript 來繪製

canvas 元素自己是沒有繪圖能力的。全部的繪製工做必須在 JavaScript 內部完成:

<script type="text/javascript">

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

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

cxt.fillStyle="#FF0000";

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

</script>

 

 

 

<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>

 

 

<script type="text/javascript">

 

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

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

cxt.fillStyle="#FF0000";

cxt.beginPath();

cxt.arc(70,18,15,0,Math.PI*2,true);

cxt.closePath();

cxt.fill();

 

</script>

 

把圖片放到畫布上

<script type="text/javascript">

 

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

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

var img=new Image()

img.src="flower.png"

cxt.drawImage(img,0,0);

 

</script>

 

 

 

什麼是SVG?

 

    SVG 指可伸縮矢量圖形 (Scalable Vector Graphics)

    SVG 用於定義用於網絡的基於矢量的圖形

    SVG 使用 XML 格式定義圖形

    SVG 圖像在放大或改變尺寸的狀況下其圖形質量不會有損失

    SVG 是萬維網聯盟的標準

 

 

SVG 的優點

 

與其餘圖像格式相比(好比 JPEG 和 GIF),使用 SVG 的優點在於:

 

    SVG 圖像可經過文本編輯器來建立和修改

    SVG 圖像可被搜索、索引、腳本化或壓縮

    SVG 是可伸縮的

    SVG 圖像可在任何的分辨率下被高質量地打印

    SVG 可在圖像質量不降低的狀況下被放大

把 SVG 直接嵌入 HTML 頁面

在 HTML5 中,您可以將 SVG 元素直接嵌入 HTML 頁面中:

實例

<!DOCTYPE html>

<html>

<body>

 

<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>

 

</body>

</html>

 

 

Canvas 與 SVG 的比較

下表列出了 canvas 與 SVG 之間的一些不一樣之處。

Canvas

  • 依賴分辨率
  • 不支持事件處理器
  • 弱的文本渲染能力
  • 可以以 .png 或 .jpg 格式保存結果圖像
  • 最適合圖像密集型的遊戲,其中的許多對象會被頻繁重繪

SVG

  • 不依賴分辨率
  • 支持事件處理器
  • 最適合帶有大型渲染區域的應用程序(好比谷歌地圖)
  • 複雜度高會減慢渲染速度(任何過分使用 DOM 的應用都不快)
  • 不適合遊戲應用

 

HTML5 - 使用地理定位

 

請使用 getCurrentPosition() 方法來得到用戶的位置。

 

下例是一個簡單的地理定位實例,可返回用戶位置的經度和緯度。

 

 

<!DOCTYPE html>

<html>

<body>

<p id="demo">點擊這個按鈕,得到您的座標:</p>

<button onclick="getLocation()">試一下</button>

<script>

var x=document.getElementById("demo");

function getLocation()

  {

  if (navigator.geolocation)

    {

    navigator.geolocation.getCurrentPosition(showPosition,showError);

    }

  else{x.innerHTML="Geolocation is not supported by this browser.";}

  }

function showPosition(position)

  {

  x.innerHTML="Latitude: " + position.coords.latitude +

  "<br />Longitude: " + position.coords.longitude;       

  }

function showError(error)

  {

  switch(error.code)

    {

    case error.PERMISSION_DENIED:

      x.innerHTML="User denied the request for Geolocation."

      break;

    case error.POSITION_UNAVAILABLE:

      x.innerHTML="Location information is unavailable."

      break;

    case error.TIMEOUT:

      x.innerHTML="The request to get user location timed out."

      break;

    case error.UNKNOWN_ERROR:

      x.innerHTML="An unknown error occurred."

      break;

    }

  }

</script>

</body>

</html>

 

在客戶端存儲數據

 

HTML5 提供了兩種在客戶端存儲數據的新方法:

 

    localStorage - 沒有時間限制的數據存儲

    sessionStorage - 針對一個 session 的數據存儲

 

以前,這些都是由 cookie 完成的。可是 cookie 不適合大量數據的存儲,由於它們由每一個對服務器的請求來傳遞,這使得 cookie 速度很慢並且效率也不高。

 

 

 

localStorage 方法

 

localStorage 方法存儲的數據沒有時間限制。次日、第二週或下一年以後,數據依然可用。

 

如何建立和訪問 localStorage:

實例

 

<script type="text/javascript">

localStorage.lastname="Smith";

document.write(localStorage.lastname);

</script>

 

 

 

下面的例子對用戶訪問頁面的次數進行計數:

實例

<script type="text/javascript">

if (localStorage.pagecount)

  {

  localStorage.pagecount=Number(localStorage.pagecount) +1;

  }

else

  {

  localStorage.pagecount=1;

  }

document.write("Visits "+ localStorage.pagecount + " time(s).");

</script>

 

 

 

 

 

sessionStorage 方法

sessionStorage 方法針對一個 session 進行數據存儲。當用戶關閉瀏覽器窗口後,數據會被刪除。

如何建立並訪問一個 sessionStorage:

實例

<script type="text/javascript">

sessionStorage.lastname="Smith";

document.write(sessionStorage.lastname);

</script>

 

 

 

 

使用 HTML5,經過建立 cache manifest 文件,能夠輕鬆地建立 web 應用的離線版本。

 

 

什麼是應用程序緩存(Application Cache)?

HTML5 引入了應用程序緩存,這意味着 web 應用可進行緩存,並可在沒有因特網鏈接時進行訪問。

應用程序緩存爲應用帶來三個優點:

  • 離線瀏覽 - 用戶可在應用離線時使用它們
  • 速度 - 已緩存資源加載得更快
  • 減小服務器負載 - 瀏覽器將只從服務器下載更新過或更改過的資源。

 

 

 

Cache Manifest 基礎

如需啓用應用程序緩存,請在文檔的 <html> 標籤中包含 manifest 屬性:

<!DOCTYPE HTML>

<html manifest="demo.appcache">

...

</html>

每一個指定了 manifest 的頁面在用戶對其訪問時都會被緩存。若是未指定 manifest 屬性,則頁面不會被緩存(除非在 manifest 文件中直接指定了該頁面)。

manifest 文件的建議的文件擴展名是:".appcache"。

請注意,manifest 文件須要配置正確的 MIME-type,即 "text/cache-manifest"。必須在 web 服務器上進行配置。

 

 

 

web worker 是運行在後臺的 JavaScript,不會影響頁面的性能。

什麼是 Web Worker?

 

當在 HTML 頁面中執行腳本時,頁面的狀態是不可響應的,直到腳本已完成。

 

web worker 是運行在後臺的 JavaScript,獨立於其餘腳本,不會影響頁面的性能。您能夠繼續作任何願意作的事情:點擊、選取內容等等,而此時 web worker 在後臺運行。

瀏覽器支持

 

全部主流瀏覽器均支持 web worker,除了 Internet Explorer。

HTML5 Web Workers 實例

 

下面的例子建立了一個簡單的 web worker,在後臺計數:

 

 

在建立 web worker 以前,請檢測用戶的瀏覽器是否支持它:

 

if(typeof(Worker)!=="undefined")

  {

  // Yes! Web worker support!

  // Some code.....

  }

else

  {

  // Sorry! No Web Worker support..

  }

 

建立 web worker 文件

 

如今,讓咱們在一個外部 JavaScript 中建立咱們的 web worker。

 

在這裏,咱們建立了計數腳本。該腳本存儲於 "demo_workers.js" 文件中:

 

var i=0;

 

function timedCount()

{

i=i+1;

postMessage(i);

setTimeout("timedCount()",500);

}

 

timedCount();

 

以上代碼中重要的部分是 postMessage() 方法 - 它用於向 HTML 頁面傳回一段消息。

 

註釋:web worker 一般不用於如此簡單的腳本,而是用於更耗費 CPU 資源的任務。

 

 

建立 Web Worker 對象

咱們已經有了 web worker 文件,如今咱們須要從 HTML 頁面調用它。

下面的代碼檢測是否存在 worker,若是不存在,- 它會建立一個新的 web worker 對象,而後運行 "demo_workers.js" 中的代碼:

if(typeof(w)=="undefined")

  {

  w=new Worker("demo_workers.js");

  }

 

而後咱們就能夠從 web worker 發生和接收消息了。

向 web worker 添加一個 "onmessage" 事件監聽器:

w.onmessage=function(event){

document.getElementById("result").innerHTML=event.data;

};

 

當 web worker 傳遞消息時,會執行事件監聽器中的代碼。event.data 中存有來自 event.data 的數據。

 

完整的 Web Worker 實例代碼

咱們已經看到了 .js 文件中的 Worker 代碼。下面是 HTML 頁面的代碼:

實例

<!DOCTYPE html>

<html>

<body>

 

<p>Count numbers: <output id="result"></output></p>

<button onclick="startWorker()">Start Worker</button>

<button onclick="stopWorker()">Stop Worker</button>

<br /><br />

 

<script>

var w;

 

function startWorker()

{

if(typeof(Worker)!=="undefined")

{

  if(typeof(w)=="undefined")

    {

    w=new Worker("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>

 

</body>

</html>

 

 

HTML5 服務器發送事件(server-sent event)容許網頁得到來自服務器的更新。

 

Server-Sent 事件 - 單向消息傳遞

Server-Sent 事件指的是網頁自動獲取來自服務器的更新。

之前也可能作到這一點,前提是網頁不得不詢問是否有可用的更新。經過服務器發送事件,更新可以自動到達。

 

 

 

接收 Server-Sent 事件通知

 

EventSource 對象用於接收服務器發送事件通知:

實例

 

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

source.onmessage=function(event)

  {

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

  };

 

 

服務器端事件流的語法是很是簡單的。把 "Content-Type" 報頭設置爲 "text/event-stream"。如今,您能夠開始發送事件流了。

PHP 代碼 (demo_sse.php):

<?php

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

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

 

$time = date('r');

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

flush();

?>

ASP 代碼 (VB) (demo_sse.asp):

<%

Response.ContentType="text/event-stream"

Response.Expires=-1

Response.Write("data: " & now())

Response.Flush()

%>

代碼解釋:

  • 把報頭 "Content-Type" 設置爲 "text/event-stream"
  • 規定不對頁面進行緩存
  • 輸出發送日期(始終以 "data: " 開頭)
  • 向網頁刷新輸出數據

 

 

 

 

HTML5 新的 Input 類型

HTML5 擁有多個新的表單輸入類型。這些新特性提供了更好的輸入控制和驗證。

本章全面介紹這些新的輸入類型:

  • email
  • url
  • number
  • range
  • Date pickers (date, month, week, time, datetime, datetime-local)
  • search
  • color

 

HTML5 的新的表單元素:

HTML5 擁有若干涉及表單的元素和屬性。

本章介紹如下新的表單元素:

  • datalist
  • keygen
  • output

 

----來自w3cschool

相關文章
相關標籤/搜索