Html5學習系列

来源:https://www.cnblogs.com/zmlljx/archive/2020/01/19/12215085.html
-Advertisement-
Play Games

Html5學習系列 HTML5 規定了一種通過 video 元素來包含視頻的標準方法 Ogg = 帶有 Theora 視頻編碼和 Vorbis 音頻編碼的 Ogg 文件 MPEG4 = 帶有 H.264 視頻編碼和 AAC 音頻編碼的 MPEG 4 文件 WebM = 帶有 VP8 視頻編碼和 Vo ...


Html5學習系列

 

 

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

 

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

 

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

 

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

 

如需在 HTML5 中顯示視頻,您所有需要的是:

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

</video>

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

 

 

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

 

audio 元素能夠播放聲音文件或者音頻流。

 

<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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Prop 1. Prop驗證 javascript Vue.component('my component', { props: { // 基礎的類型檢查 ( 和 會通過任何類型驗證) propA: Number, // 多個可能的類型 propB: [String, Number], // 必填的 ...
  • 效果圖 註:值是根據原生select中的值來動態獲取併進行分類 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> <link rel="stylesheet" ...
  • 這個環境比較簡單 搭建 TypeScript 開發環境 什麼是 compiler? less 編譯器: EcmaScript 6 編譯器: TypeScript 編譯器: 一句話:把 TypeScript 轉換為 JavaScript ,瀏覽器就具有運行了 線上測試編譯環境 compiler "線上 ...
  • babel:將瀏覽器不支持的ES6語法轉為javascript 查看node是否安裝: npm -v node -v 實例演示:在桌面新建part5目錄在cmd命令行中 cd desktop cd part5 安裝babel:初始化package.json文件:描述當前項目信息,包括依賴等 npm ...
  • Angular 是什麼 Angular(讀音['æŋgjʊlə])是一套用於構建用戶界面的 JavaScript 框架。由 Google 開發和維護,主要被用來開發單頁面應用程式。 類似於 "Vue.js" + MVVM(數據驅動視圖思想) + 組件化 + 模塊化 + 指令 + ...... 由 G ...
  • 目前,無論你使用什麼前端框架,都必然要使用到各種 NodeJS 工具,Angular 也不例外。與其它框架不同,Angular 從一開始就走的“全家桶”式的設計思路,因此 @angular/cli 這款工具裡面集成了日常開發需要使用的所有 Node 模塊,使用 @angular/cli 可以大幅度降 ...
  • ng啟動過程 目錄結構 介紹 文件 main.js 描述:模塊化啟動入口 職責:載入啟動根模塊 AppModule 描述:項目根模塊 職責:把組件、服務、路由、指令等組織到一起,設置啟動組件為根組件 AppComponent 描述:項目根組件 職責:替換掉 文件中的 `` 節點 ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...