HTML5與移動端Web

概述css

HTML5 提供了不少新的功能,主要有:html

  • 新的 HTML 元素,例如 section, nav, header, footer, article 等前端

  • 用於繪畫的 Canvas 元素html5

  • 用於多媒體播放的 video 和 audio 元素android

  • 用於定位的 Geolocation APIios

  • 本地存儲以及離線應用git

  • Web Workers、Web WebSocket APIgithub

移動前端開發可分爲:web

  • 手機網頁開發。這部分跟web前端開發差異不大,使用的技術都是html+css+js。區別爲手機瀏覽器是webkit的天下,pc端是IE的天下。數據庫

  • App前端開發。使用的技術也是html+css+js,但它須要基於PhoneGap,React Native等開發平臺調用手機核心功能接口(包括地理定位,加速器,聯繫人,聲音和振動等)模擬native app,這部分跟web前端開發徹底不一樣。最終代碼發佈要分別編譯成各系統平臺的app。

canvas

canvas部分請參考:淺嘗HTML5之canvas

drag and drop(拖拽)

拖拽元素事件: 事件對象爲被拖拽元素

  • dragstart:  拖拽前觸發 

  • drag:拖拽前、拖拽結束之間,連續觸發

  • dragend: 拖拽結束觸發

目標元素事件: 事件對象爲目標元素

  • dragenter:  進入目標元素觸發,至關於mouseover

  • dragover: 進入目標、離開目標之間,連續觸發

  • dragleave:  離開目標元素觸發,至關於mouseout

  • drop: 在目標元素上釋放鼠標觸發

事件的執行順序 :drop不觸發的時候

  • dragstart  >  drag >  dragenter >  dragover >  dragleave > dragend 

事件的執行順序 :drop觸發的時候(dragover的時候阻止默認事件)

  • dragstart  >  drag >  dragenter >  dragover >  drop > dragend

解決火狐下的問題

火狐瀏覽器下必須設置dataTransfer對象的setData方法才能夠拖拽除圖片外的其餘標籤。

dataTransfer屬性和方法

屬性 描述
dropEffect 設置或獲取拖曳操做的類型和要顯示的光標類型
effectAllowed 設置光標樣式(none, copy, copyLink, copyMove, link, linkMove, move, all 和 uninitialized)
setDragImage 三個參數:指定的元素,座標X,座標Y
files 獲取外部拖拽的文件,返回一個filesList列表。filesList下有個type屬性,返回文件的類型

 

方法 描述
clearData 經過 dataTransfer 或 clipboardData 對象從剪貼板刪除一種或多種數據格式
setData() 設置數據 key和value(必須是字符串)
getData() 獲取數據,根據key值,獲取對應的value

只有加阻止默認事件才能夠觸發drop

1
2
3
  oDiv.ondragover =  function (ev){   //只有加阻止默認事件才能夠觸發drop
         ev.preventDefault();
     };

drag and drop的瀏覽器支持狀況:

2169587196-553cce03af12f.jpg

HTML5實現拖拽上傳預覽圖片(點擊下載實現代碼

FileReader(讀取文件信息)

屬性名 描述
error 在讀取文件時發生的錯誤. 只讀
readyState 代表FileReader對象的當前狀態
result 讀取到的文件內容。這個屬性只在讀取操做完成以後纔有效

 

方法名 描述
abort 停止該讀取操做,在返回時,readyState屬性的值爲DONE
readAsArrayBuffer 將File對象F讀取爲一個 ArrayBuffer 對象
readAsBinaryString 將File對象F讀取爲一個二進制字符串
readAsDataURL 將File對象F讀取爲編碼過的數據URL
readAsText(File f, [encoding]) 讀取 File對象F並賦予一個字符串

建立一個FileReader對象:

1
var  reader =  new  FileReader();

Web Worker和緩存

Web Worker的基本原理就是在當前js的主線程中,使用Worker類加載一個js文件來開闢一個新的線程,起到互不阻塞執行的效果,而且提供主線程和新線程之間數據交換的接口:postMessage,onmessage。

主機 worker 和 worker 腳本能夠經過 postMessage 發送消息並使用 onmessage 事件偵聽響應。消息的內容做爲事件的數據屬性進行發送。

1
2
3
4
var  worker =  new  Worker( 'worker.js' );
worker.onmessage =  function (e) {
   alert(e.data);
};

worker主線程:

1.經過 worker = new Worker( url ) 加載一個JS文件來建立一個worker,同時返回一個worker實例。

2.經過worker.postMessage( data ) 方法來向worker發送數據。

3.綁定orker.onmessage方法來接收worker發送過來的數據。

4.可使用 worker.terminate() 來終止一個worker的執行。

worker新線程:

1.經過postMessage( data ) 方法來向主線程發送數據。

2.綁定onmessage方法來接收主線程發送過來的數據。

例子:計數功能

首先建立一個index.html文件

QQ截圖20150604182750.png

其次,建立一個count.js文件:

1
2
3
4
5
6
7
var  countNum = 0;
function  count(){
     postMessage(countNum);
     countNum++;
     setTimeout(count,1000);
}
count();

再建立一個index.js文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var  numDiv;
var  work =  null ;
window.onload =  function  () {
     numDiv = document.getElementById( 'numDiv' );
     document.getElementById( 'start' ).onclick = startWorker;
     document.getElementById( 'stop' ).onclick =  function  () {
         if (work){
             work.terminate(); //中止,釋放掉資源
             work =  null ; //work從新初始化
         }
     };
};
function  startWorker(){
     if (work){
         return ;
     }
     work =  new  Worker( 'count.js' );
     work.onmessage =  function  (e) {
         numDiv.innerHTML = e.data;
     };
}

2022515381-553cef54e0852_articlex.jpg

Web SQL

三個核心方法:

一、openDatabase:這個方法使用現有數據庫或建立新數據庫建立數據庫對象。

二、transaction:這個方法容許咱們根據狀況控制事務提交或回滾。

三、executeSql:這個方法用於執行真實的SQL查詢。 

瀏覽器的本地數據庫佔用資源少,處理速度快。

openDatabase方法打開一個已經存在的數據庫,若是數據庫不存在,它還能夠建立數據庫,建立並打開數據庫的語法以下:

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

參數爲:數據庫名(mydb)、版本號(1.0)、描述(Test DB)和數據庫大小(2*1024*1024)以及建立回調函數。

WebSockets

TCP是因特網的基礎傳輸協議,而WebSocket是Web應用程序的傳輸協議,它提供了雙向的,按序到達的數據流。WebSocket鏈接的是URL,而非因特網上的主機和端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  // 建立一個Socket實例
var  socket =  new  WebSocket( 'ws://localhost:8080' );
// 打開Socket
socket.onopen =  function (ev) {
     // 發送一個初始化消息
     socket.send( 'hello HTML5' );
     // 監聽消息
     socket.onmessage =  function (ev) {
         console.log( 'Client received a message' ,ev);
     };
     // 監聽Socket的關閉
     socket.onclose =  function (ev) {
         console.log( 'Client notified socket has closed' ,ev);
     };
     // 關閉Socket....
     socket.close()
};

同http協議使用http://開頭同樣,WebSocket協議的URL使用ws://開頭,而安全的WebSocket協議使用wss://開頭。

HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。

 

3388588914-553de862a75ae_articlex.jpg

默認HTTP的端口號爲80,HTTPS的端口號爲443。

getUserMedia API

navigator.getUserMedia能夠提示用戶須要權限去使用像攝像頭或麥克風之類的媒體設備

 

下面是一個獲取用戶攝像頭並提供拍照功能的例子(點擊下載實現源碼

下面是瀏覽器兼容性的寫法:

 

QQ截圖20150604183146.png

瀏覽器對象點擊下載大圖

1465036893-553e4ae9ad4c3.jpg

audio和video

下圖是audio和video的屬性及其瀏覽器的兼容性:

3235211975-553dee6d0cdb8.jpg

Fullscreen API

進入全屏模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 找到正確的方法  
function  launchFullScreen(element) {  
   if (element.requestFullScreen) {  
     element.requestFullScreen();  
   else  if (element.mozRequestFullScreen) {  
     element.mozRequestFullScreen();  
   else  if (element.webkitRequestFullScreen) {  
     element.webkitRequestFullScreen();  
   }  
}  
// 啓動全屏模式  
launchFullScreen(document.documentElement);  // 整個頁面  
launchFullScreen(document.getElementById( "videoElement" ));  // 單獨元素 
退出全屏模式
function  cancelFullscreen() {  
   if (document.cancelFullScreen) {  
     document.cancelFullScreen();  
   else  if (document.mozCancelFullScreen) {  
     document.mozCancelFullScreen();  
   else  if (document.webkitCancelFullScreen) {  
     document.webkitCancelFullScreen();  
   }  
}  
// 取消全屏  
cancelFullscreen();

全屏屬性和事件

  • document.fullScreenElement:當前全屏顯示的元素。

  • document.fullScreenEnabled:判斷瀏覽器是否支持全屏。

  • fullscreenchange事件:全屏狀態改變事件。

History API

HTML5 更新了兩個API,無刷新更新地址 history.pushState方法和history.replaceState 方法。

Geolocation API

Geolocation API 是經過window.navigator.geolocation 得到對地理定位的訪問的。該對象有以下三個方法:

  • getCurrentPosition()

  • watchPosition()

  • clearWatch()

4211637635-553e4732ca7c5.jpg

表單元素

HTML5 新增了不少表單元素讓開發者構建更優秀的 Web 應用程序。如下是HTML5新增的表單元素

  • datalist

  • datetime

  • output

  • keygen 

  • date 

  • month 

  • week

  • time

  • color

  • number 

  • range 

  • email 

  • url

1485979339-553e37ef283da_articlex.jpg

html5移動端優化

PC端的優化對於移動端一樣適用,Android同時支持4個併發請求,iOS 5後可支持6個,因此,應儘可能減小http請求數

3552139123-553e3cd058c1c_articlex.jpg

1. PC優化手段在Mobile側一樣適用

2. 在Mobile側咱們提出三秒種渲染完成首屏指標

3. 基於第二點,首屏加載3秒完成或使用Loading

4. 基於聯通3G網絡平均338KB/s(2.71Mb/s),因此首屏資源不該超過1014KB

5. Mobile側因手機配置緣由,除加載外渲染速度也是優化重點

6. 基於第五點,要合理處理代碼減小渲染損耗

7. 基於第2、第五點,全部影響首屏加載和渲染的代碼應在處理邏輯中後置

8. 加載完成後用戶交互使用時也需注意性能

462322984-553e3da07b565.jpg

不濫用Float

Float在渲染時計算量比較大,儘可能減小使用

不濫用Web字體

Web字體須要下載,解析,重繪當前頁面,儘可能減小使用

不聲明過多的Font-size

過多的Font-size引起CSS樹的效率

減小重繪和迴流

a) 避免沒必要要的Dom操做

b) 儘可能改變Class而不是Style,使用classList代替className

c) 避免使用document.write

d) 減小drawImage

Viewport能夠加速頁面的渲染,請使用如下代碼

QQ截圖20150604183227.png

動畫優化

a) 儘可能使用CSS3動畫

b) 合理使用requestAnimationFrame動畫代替setTimeout

c) 適當使用Canvas動畫 5個元素之內使用css動畫,5個以上使用Canvas動畫(iOS8可以使用webGL)

GPU加速

CSS中如下屬性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)來觸發GPU渲染,請合理使用

PS:過渡使用會引起手機過耗電增長

資料參考:

如何作到一秒渲染一個移動頁面

HTML5與CSS3語法提供瀏覽器兼容性測試及使用建議

meta相關總結

HTML5頁面窗口自動調整到設備寬度,並禁止用戶縮放頁面

1433414035228191.png

忽略將頁面中的數字識別爲電話號碼

 

QQ截圖20150604183417.png

忽略Android平臺中對郵箱地址的識別

QQ截圖20150604183542.png

當網站添加到主屏幕快速啓動方式,可隱藏地址欄,僅針對iOS的safari

QQ截圖20150604183555.png

 

 

將網站添加到主屏幕快速啓動方式,僅針對ios的safari頂端狀態條的樣式

QQ截圖20150604183611.png

 

 

移動端touch事件(區分webkit 和 winphone)

當用戶手指放在移動設備在屏幕上滑動會觸發的touch事件

如下支持webkit:

touchstart——當手指觸碰屏幕時候發生。無論當前有多少隻手指

touchmove——當手指在屏幕上滑動時連續觸發。一般咱們再滑屏頁面,會調用event的preventDefault()能夠阻止默認狀況的發生:阻止頁面滾動

touchend——當手指離開屏幕時觸發

touchcancel——系統中止跟蹤觸摸時候會觸發。例如在觸摸過程當中忽然頁面alert()一個提示框,此時會觸發該事件,這個事件比較少用

如下支持windows phone 8:

MSPointerDown——當手指觸碰屏幕時候發生。無論當前有多少隻手指

MSPointerMove——當手指在屏幕上滑動時連續觸發。一般咱們再滑屏頁面,會調用css的html{-ms-touch-action: none;}能夠阻止默認狀況的發生:阻止頁面滾動

MSPointerUp——當手指離開屏幕時觸發

手機拍照和上傳圖片

QQ截圖20150604183628.png

使用總結:

  • iOS有拍照、錄像、選取本地圖片功能

  • 部分android只有選取本地圖片功能

  • winphone不支持

  • input控件默認外觀醜陋

移動端手勢總結

主要用戶操做

3679495380-553e443f4170f.jpg

手勢的具體操做

251376531-553e4403d337d_articlex.jpg

觸摸屏手勢

2002195188-553e44249b29c_articlex.jpg

手勢的具體操做

457264527-553e443113302.jpg

相關文章
相關標籤/搜索