轉載:移動web開發規範

本文來源:http://blog.csdn.net/joueu/article/details/44329825javascript

如下是規範建議,均是平常在開發當中的的一些經驗,僅供參考。css

移動web開發規範

一.頭部聲明

一、其中width=device-width就是說把頁面寬度設置成和屏幕寬度同樣html

<meta name="viewport" content="width=device-width,initial-scale=1.0">

二、首先咱們來看看webkit內核中的一些私有的meta標籤,這些meta標籤在開發webapp時起到很是重要的做用,這個meta標籤表示:強制讓文檔的寬度與設備的寬度保持1:1,而且文檔最大的寬度比例是1.0,且不容許用戶點擊屏幕放大瀏覽;前端

<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0,  user-scalable=0;" name="viewport" />

三、meta標籤是iphone設備中的safari私有meta標籤,它表示:容許全屏模式瀏覽;html5

<meta content="yes」 name=" apple-mobile-web-app-capable" />

四、 meta標籤也是iphone的私有標籤,它指定的iphone中safari頂端的狀態條的樣式java

<meta content="black" name=" apple-mobile-web-app-status-bar-style"/>

五、meta標籤表示:告訴設備忽略將頁面中的數字識別爲電話號碼android

<meta content="telephone=no" name="format-detection" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />

forbid apple toolsios

網站開啓對web app程序的支持css3

<meta content="yes" name="apple-mobile-web-app-capable" />

控制狀態欄顯示樣式git

默認值爲default(白色),能夠定爲black(黑色)和black-translucent(灰色半透明)

<meta content="black" name="apple-mobile-web-app-status-bar-style" />

phone numer select

<meta name="format-detection" content="telephone=no" />

添加到桌面時有圓角 http://iconogen.com/

<link rel="apple-touch-icon-precomposed" href="./build/img/icon.png" />

不帶高光顯示

<link rel="apple-touch-startup-image" href="" />

iPad (portrait) SPLASHSCREEN

<link href="src" media="(device-width: 768px) and (orientation: portrait)" rel="apple-touch-startup-image">

三、當前移動主站上用到的聲明:

<!DOCTYPE html>

2、字體設置

一、使用無襯線字體

body {
font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif;
}

iOS 4.0+ 使用英文字體 Helvetica Neue,以前的iOS版本降級使用 Helvetica。中文字體設置爲華文黑體STHeiTi。 需補充說明,華文黑體並不存在iOS的字體庫中(http://support.apple.com/kb/HT5484?viewlocale=en_US), 但系統會自動將華文黑體STHeiTi兼容命中系統默認中文字體黑體-簡或黑體-繁

Heiti SC Light 黑體-簡 細體
Heiti SC Medium 黑體-簡 中黑
Heiti TC Light 黑體-繁 細體
Heiti TC Medium 黑體-繁 中黑

原生Android下中文字體與英文字體都選擇默認的無襯線字體

4.0 以前版本英文字體原生 Android 使用的是 Droid Sans,中文字體原生 Android 會命中 Droid Sans Fallback
4.0 以後中英文字體都會使用原生 Android 新的 Roboto 字體
其餘第三方 Android 系統也一致選擇默認的無襯線字體

下面區分一下無襯線字體與襯線字體之間的區別

有襯線字體英文名爲: serif 
無襯線字體英文名爲: sans-serif 
在西方國家羅馬字母陣營中,字體分爲兩大種類:Sans Serif和Serif; 
Serif的意思是,在字的筆畫開始及結束的地方有額外的裝飾,並且筆畫的粗細會因直橫的不一樣而有不一樣。相反的,Sans Serif則沒有這些額外的裝飾,筆畫粗細大體差很少。

3、基礎交互

設置全局的CSS樣式,避免圖中的長按彈出菜單與選中文本的行爲

a, img {
-webkit-touch-callout: none; /* 禁止長按連接與圖片彈出菜單 */
}#  #
html, body {
    -webkit-user-select: none;   /* 禁止選中文本(如無文本選中需求,此爲必選項) */
    user-select: none;
}

4、高性能Mobile Web開發

一、高性能CSS3動畫

高性能移動Web相較PC的場景須要考慮的因素也相對更多更復雜,咱們總結爲如下幾點: 流量、功耗與流暢度。 在PC時 代咱們更多的是考慮體驗上的流暢度,而在Mobile端自己豐富的場景下,須要額外關注對用戶基站網絡流量使用的情 況,設備耗電量的狀況。 關於流暢度,主要體如今前端動畫中,在現有的前端動畫體系中,一般有兩種模式:JS動畫與CSS3動畫。 JS動畫是通 過JS動態改寫樣式實現動畫能力的一種方案,在PC端兼容低端瀏覽器中不失爲一種推薦方案。 而在移動端,咱們選擇 性能更優瀏覽器原生實現方案:CSS3動畫。

然而,CSS3動畫在移動多終端設備場景下,相比PC會面對更多的性能問題,主要體如今動畫的卡頓與閃爍。目前對提 升移動端CSS3動畫體驗的主要方法有幾點:

1.儘量多的利用硬件能力,如使用3D變形來開啓GPU加速

-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);

二、如動畫過程有閃爍(一般發生在動畫開始的時候),能夠嘗試下面的Hack:

-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-perspective: 1000;
-moz-perspective: 1000;
-ms-perspective: 1000;
perspective: 1000;

三、以下面一個元素經過translate3d右移500px的動畫流暢度會明顯優於使用left屬性:

#ball-1 {
  transition: -webkit-transform .5s ease;
  -webkit-transform: translate3d(0, 0, 0);
}
#ball-1.slidein {
  -webkit-transform: translate3d(500px, 0, 0);
}
#ball-2 {
  transition: left .5s ease;
  left: 0;
}
#ball-2.slidein {
  left: 500px;
}

注:3D變形會消耗更多的內存與功耗,應確實有性能問題時纔去使用它,兼在權衡

二、儘量少的使用box-shadows與gradients

box-shadows與gradients每每都是頁面的性能殺手,尤爲是在一個元素同時都使用了它們,因此擁抱扁平化設計吧

三、儘量的讓動畫元素不在文檔流中,以減小重排

position: fixed;
position: absolute;

四、優化 DOM layout 性能

咱們從實例開始描述這個主題: 這是兩段能力上徹底等同的代碼,顯式的差別正如咱們所見,只有執行順序的區別。但真是如此嗎?下面是加了說明註釋的代碼版本,很好的闡述了其中的進一步差別:

// 觸發兩次 layout
var newWidth = aDiv.offsetWidth + 10;   // Read
aDiv.style.width = newWidth + 'px';     // Write
var newHeight = aDiv.offsetHeight + 10; // Read
aDiv.style.height = newHeight + 'px';   // Write

// 只觸發一次 layout
var newWidth = aDiv.offsetWidth + 10;   // Read
var newHeight = aDiv.offsetHeight + 10; // Read
aDiv.style.width = newWidth + 'px';     // Write
aDiv.style.height = newHeight + 'px';   // Write

從註釋中可找到規律,連續的讀取offsetWidth/Height屬性與連續的設置width/height屬性,相比分別讀取設置單 個屬性可少觸發一次layout。

從結論看彷佛與執行隊列有關,沒錯,這是瀏覽器的優化策略。全部可觸發layout的操做都會被暫時放入 layout-queue 中,等到必須更新的時候,再計算整個隊列中全部操做影響的結果,如此就可只進行一次的layout, 從而提高性能。

關鍵一,可觸發layout的操做,哪些操做下會layout的更新(也稱爲reflow或者relayout)?

咱們從瀏覽器的源碼實現入手,以開源Webkit/Blink爲例, 對layout的更新,Webkit 主要經過 Document::updateLayout 與 Document::updateLayoutIgnorePendingStylesheets 兩個方法:

5、CSS動畫屬性性能

CSS動畫屬性會觸發整個頁面的重排relayout、重繪repaint、重組recomposite

Paint一般是其中最花費性能的,儘量避免使用觸發paint的CSS動畫屬性,這也是爲何咱們推薦在CSS動畫中使用webkit-transform: translateX(3em)的方案代替使用left: 3em,由於left會額外觸發layout與paint,而webkit-transform只觸發整個頁面composite

div {
  -webkit-animation-duration: 5s;
  -webkit-animation-name: move;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-direction: alternate;
  width: 200px;
  height: 200px;
  margin: 100px;
  background-color: #808080;
  position: absolute;
}

@-webkit-keyframes move{
    from {
        left: 100px;
    }
    to {
        left: 200px;
    }
}

6、佈局技巧

box-sizing

行內圖片

背景圖片

媒體查詢

flex rem 的使用

7、移動端JS庫的使用

SwipeJS  Slide show
DeviceJS device check
ZeptoJS  Min version jQuery
iscroll  scroll lib
FastClick 解決zeptoJS tap 點透,提高click 點擊

http://www.wheattime.com/increase-your-sites-performance-with-hardware-accelerated-css.html

8、移動性能

要考慮Android低端機與2G網絡場景下性能 注意!

發佈前必要檢查項

全部圖片必須有進行過壓縮

考慮適度的有損壓縮,如轉化爲80%質量的jpg圖片

考慮把大圖切成多張小圖,常見在banner圖過大的場景

加載性能優化, 達到打開足夠快

數據離線化,考慮將數據緩存在 localStorage

初始請求資源數 < 4 注意!

圖片使用CSS Sprites 或 DATAURI

外鏈 CSS 中避免 @import 引入

考慮內嵌小型的靜態資源內容

初始請求資源gzip後整體積 < 50kb

靜態資源(HTML/CSS/JS/IMAGE)是否優化壓縮?

避免打包大型類庫

確保接入層已開啓Gzip壓縮

儘可能使用CSS3代替圖片

初始首屏以外的圖片資源需延遲加載 注意!

單頁面應用(SPA)考慮延遲加載非首屏業務模塊

運行性能優化, 達到操做足夠流暢

避免 iOS 300+ms 點擊延時問題 注意!

緩存 DOM 選擇與計算

避免觸發頁面重繪的操做

Debounce連續觸發的事件(scroll/resize),避免高頻繁觸發執行

儘量使用事件代理,避免批量綁定事件

使用CSS3動畫代替JS動畫

避免在低端機上使用大量CSS3漸變陰影效果,可考慮降級效果來提高流暢度

HTML結構層級保持足夠簡單,推薦不超過 5 個層級

盡能少的使用CSS高級選擇器與通配選擇器

Keep it simple

在線性能檢測評定工具使用指南

訪問 Google PageSpeed 在線評定網站

在地址欄輸入目標URL地址,點擊分析按鈕開始檢測

按 PageSpeed 分析出的建議進行優化,優先解決紅色類別的問題

9、ios和 的問題列表

僞類 :active 生效

要CSS僞類:active生效,只須要給document綁定touchstart或touchend事件

<style>
a {
  color: #000;
}
a:active {
  color: #fff;
}
</style>
<a herf=foo >bar</a>
<script>
  document.addEventListener('touchstart',function(){},false);
</script>

消除transition閃屏

兩個方法

-webkit-transform-style: preserve-3d;
/*設置內嵌的元素在 3D 空間如何呈現:保留 3D*/
-webkit-backface-visibility:?hidden;
/*(設置進行轉換的元素的背面在面對用戶時是否可見:隱藏)*/

消除ie10裏面的那個叉號

http://msdn.microsoft.com/en-us/library/windows/apps/hh767361.aspx>

input:-ms-clear{display:none;}

關於ios與os端字體的優化(橫豎屏會出現字體加粗不一致等)

ios瀏覽器橫屏時會重置字體大小,設置 text-size-adjust 爲 none 能夠解決ios上的問題,但桌面版safari的字體縮放功能會失效,所以最佳方案是將 text-size-adjust 爲 100% 。

-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;

js事件

click 事件廣泛 300ms 的延遲 在手機上綁定click 事件,會使得操做有300ms 的延遲,體驗並非很好。 開發者大多數會使用封裝的 tap 事件來代替click 事件,所謂的 tap 事件由 touchstart 事件 + touchmove 判斷 + touchend 事件封裝組成

ios點擊會慢300ms

https://developers.google.com/mobile/articles/fast_buttons?hl=de-DEhttp://stackoverflow.com/questions/12238587/eliminate-300ms-delay-on-click-events-in-mobile-safari

使用css3動畫的時儘可能利用3D加速,從而使得動畫變得流暢。動畫過程當中的動畫閃白能夠經過backface-visibility 隱藏。

-webkit-transform-style: preserve-3d;
-webkit-backface-visibility: hidden;

ie10的特殊鼠標事件

http://www.mansonchor.com/blog/blog_detail_73.html

不讓android識別郵箱

<meta content="email=no" name="format-detection" />

禁止ios彈出各類操做窗口

-webkit-touch-callout:none

禁止用戶選中文字

-webkit-user-select:none

動畫效果中,使用translate比使用定位性能高

http://paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/

拿到滾動條

window.scrollY
window.scrollX

好比要綁定一個touchmove的事件,正常的狀況下相似這樣(來自呼吸二氧化碳)

$('div').on('touchmove', function(){
   //.….code
});

而若是中間的code須要處理的東西多的話,fps就會降低影響程序順滑度,而若是改爲這樣

$('div').on('touchmove', function(){
   setTimeout(function(){
     //.….code
   },0);
});

把代碼放在setTimeout中,會發現程序變快.

關於ios系統中,webapp啓動圖片在不一樣設備上的適應性設置

http://stackoverflow.com/questions/4687698/mulitple-apple-touch-startup-image-resolutions-for-ios-web-app-esp-for-ipad/10011893#10011893

關於ios系統中,中文輸入法輸入英文時,字母之間可能會出現一個六分之一空格

能夠經過正則去掉

this.value = this.value.replace(/\u2006/g, '');

關於android webview中,input元素輸入時出現的怪異狀況

外邊框多一個紅色什麼的邊框

Android web視圖,至少在HTC EVO和三星的Galaxy Nexus中,文本輸入框在輸入時表現的就像佔位符。狀況爲一個相似水印的東西在用戶輸入區域,一旦用戶開始輸入便會消失(見圖片)。 在android的默認樣式下當輸入框得到焦點後,若存在一個絕對定位或者fixed的元素,佈局會被破壞,其餘元素與系統輸入字段會發生重疊(如搜索圖標將消失爲搜索字段),能夠觀察到佈局與原始輸入字段有誤差(見截圖)。 這是一個至關複雜的問題,如下簡單佈局能夠重現這個問題:

<label for="phone">Phone: *</label>
<input type="tel" name="phone" id="phone" minlength="10" maxlength="10" inputmode="latin digits" required="required" />

解決方法

-webkit-user-modify: read-write-plaintext-only

詳細參考http://www.bielousov.com/2012/android-label-text-appears-in-input-field-as-a-placeholder/ 注意,該屬性會致使中文不能輸入詞組,只能單個字。

JS動態生成的select下拉菜單在Android2.x版本的默認瀏覽器裏不起做用

解決方法刪除了overflow-x:hidden; 而後在JS生成下來菜單以後focus聚焦,這兩步操做以後解決了問題。(來自島都-小Qi)

HTML5標籤的使用

在開始編寫webapp時,哥建議前端工程師使用HTML5,而放棄HTML4,由於Html5能夠實現一些HTML4中沒法實現的豐富的WEB應用程序的體驗,能夠減小開發者不少的工做量,固然了你決定使用HTML5前,必定要對此很是熟悉,要知道HTML5的新標籤的做用。好比定義一塊內容或文章區域可以使用section標籤,定義導航條或選項卡能夠直接使用nav標籤等等。

放棄CSS float屬性

在項目開發過程當中能夠會遇到內容排列排列顯示的佈局(見下圖),假如你碰見這樣的視覺稿,哥建議你放棄float,能夠直接使用display:block;

利用CSS3邊框背景屬性

這個按鈕有圓角效果,有內發光效果還有高光效果,這樣的按鈕使用CSS3寫是沒法寫出來的,固然圓角可使用CSS3來寫,但高光和內發光卻沒法使用CSS3編寫, 這個時候你不妨使用-webkit-border-image來定義這個按鈕的樣式。

-webkit-border-image就個很複雜的樣式屬性。

塊級化a標籤

請保證將每條數據都放在一個a標籤中,爲什麼這樣作?由於在觸控手機上,爲提高用戶體驗,儘量的保證用戶的可點擊區域較大。

自適應佈局模式

在編寫CSS時,我不建議前端工程師把容器(無論是外層容器仍是內層)的寬度定死。爲達到適配各類手持設備,我建議前端工程師使用自適應佈局模式(支付寶採用了自適應佈局模式),由於這樣作可讓你的頁面在ipad、itouch、ipod、iphone、android、web safarik、chrome都可以正常的顯示,你無需再次考慮設備的分辨率。

學會使用webkit-box

上一節,咱們說過自適應佈局模式,有些同窗可能會問:如何在移動設備上作到徹底自適應呢?很感謝webkit爲display屬性提供了一個webkit-box的值,它能夠幫助前端工程師作到盒子模型靈活控制。

如何去除Android平臺中對郵箱地址的識別

看過iOS webapp API的同窗都知道iOS提供了一個meta標籤:用於禁用iOS對頁面中電話號碼的自動識別。在iOS中是不自動識別郵件地址的,但在Android平臺,它會自動檢測郵件地址,當用戶touch到這個郵件地址時,Android會彈出一個框提示用戶發送郵件,若是你不想Android自動識別頁面中的郵件地址,你不妨加上這樣一句meta標籤在head中

<meta content="email=no" name="format-detection" />

如何去除iOS和Android中的輸入URL的控件條

你的老闆或者PD或者交互設計師可能會要求你:可否讓咱們的webapp更加像nativeapp,我不想讓用戶看見那個輸入url的控件條? 答案是能夠作到的。咱們能夠利用一句簡單的JavaScript代碼來實現這個效果

setTimeout(scrollTo,0,0,0);

請注意,這句代碼必須放在window.onload裏纔可以正常的工做,並且你的當前文檔的內容高度必須是高於窗口的高度時,這句代碼纔能有效的執行。

如何禁止用戶旋轉設備

我曾經也想禁止用戶旋轉設備,也想實現像某些客戶端那樣:只能在肖像模式或景觀模式下才能正常運行。但如今我能夠很負責任的告訴你:別想了!在移動版的webkit中作不到!

至少Apple webapp API已經說到了:咱們爲了讓用戶在safari中正常的瀏覽網頁,咱們必須保證用戶的設備處於任何一個方位時,safari都可以正常的顯示網頁內容(也就是自適應),因此咱們禁止開發者阻止瀏覽器的orientationchange事件,看來蘋果公司的出發點是正確的,蘋果確實不是通常的蘋果。

iOS已經禁止開發者阻止orientationchange事件,那Android呢?對不起,我沒有找到任何資料說Android禁止開發者阻止瀏覽器orientationchange事件,可是在Android平臺,確實也是阻止不了的。

如何檢測用戶是經過主屏啓動你的webapp

看過Apple webapp API的同窗都知道iOS爲safari提供了一個將當前頁面添加主屏的功能,按下iphoneipodipod touch底部工具中的小加號,或者ipad頂部左側的小加號,就能夠將當前的頁面添加到設備的主屏,在設備的主屏會自動增長一個當前頁面的啓動圖標,點擊該啓動圖標就能夠快速、便捷的啓動你的webapp。從主屏啓動的webapp和瀏覽器訪問你的webapp最大的區別是它清除了瀏覽器上方和下方的工具條,這樣你的webapp就更加像是nativeapp了,還有一個區別是window對像中的navigator子對象的一個standalone屬性。iOS中瀏覽器直接訪問站點時,navigator.standalone爲false,從主屏啓動webapp時,navigator.standalone爲true, 咱們能夠經過navigator.standalone這個屬性獲知用戶當前是不是從主屏訪問咱們的webapp的。

在Android中歷來沒有添加到主屏這回事!

如何關閉iOS中鍵盤自動大寫

咱們知道在iOS中,當虛擬鍵盤彈出時,默認狀況下鍵盤是開啓首字母大寫的功能的,根據某些業務場景,可能咱們須要關閉這個功能,移動版本webkit爲input元素提供了autocapitalize屬性,經過指定autocapitalize=」off」來關閉鍵盤默認首字母大寫。

iOS中如何完全禁止用戶在新窗口打開頁面

有時咱們可能須要禁止用戶在新窗口打開頁面,咱們可使用a標籤的target=」_self「來指定用戶在新窗口打開,或者target屬性保持空,可是你會發現iOS的用戶在這個連接的上方長按3秒鐘後,iOS會彈出一個列表按鈕,用戶經過這些按鈕仍然能夠在新窗口打開頁面,這樣的話,開發者指定的target屬性就失效了,可是能夠經過指定當前元素的-webkit-touch-callout樣式屬性爲none來禁止iOS彈出這些按鈕。這個技巧僅適用iOS對於Android平臺則無效。

iOS中如何禁止用戶保存圖片\複製圖片

咱們在第13條技巧中提到元素的-webkit-touch-callout屬性,一樣爲一個img標籤指定-webkit-touch-callout爲none也會禁止設備彈出列表按鈕,這樣用戶就沒法保存\複製你的圖片了。

iOS中如何禁止用戶選中文字

咱們經過指定文字標籤的-webkit-user-select屬性爲none即可以禁止iOS用戶選中文字。

如何解決盒子邊框溢出

當你指定了一個塊級元素時,而且爲其定義了邊框,設置了其寬度爲100%。在移動設備開發過程當中咱們一般會對文本框定義爲寬度100%,將其定義爲塊級元素以實現全屏自適應的樣式,但此時你會發現,該元素的邊框(左右)各1個像素會溢了文檔,致使出現橫向滾動條,爲解決這一問題,咱們能夠爲其添加一個特殊的樣式-webkit-box-sizing:border-box;用來指定該盒子的大小包括邊框的寬度。

如何解決Android 2.0如下平臺中圓角的問題

若是你們夠細心的話,在作wap站點開發時,你們應該會發現android 2.0如下的平臺中問題特別的多,好比說邊框圓角這個問題吧。 在對一個元素定義圓角時,爲徹底兼容android 2.0如下的平臺,咱們必需要按照如下技巧來定義邊框圓角:

1\-webkit這個前綴必需要加上(在iOS中,你能夠不加,但android中必定要加);
2\若是對針對邊框作樣式定義,好比border:1px solid #000;那麼-webkit-border-radius這屬性必需要出如今border屬性後。
3\假如咱們有這樣的視覺元素,左上角和右上角是圓角時,咱們必需要先定義全局的(4個角的圓角值)-webkit-border-radius:5px;而後再依次的覆蓋左下角和右下角,-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-border:0;不然在android 2.0如下的平臺中將所有顯示直角,還有記住!-webkit這個前綴必定要加上!

如何解決android平臺中頁面沒法自適應

雖然你的html和css都是徹底自適應的,但有一天若是你發現你的頁面在android中顯示的並非自適應的時候,首先請你確認你的head標籤中是否包含如下meta標籤:

<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0;" />

若是有的話,那請你再仔細的看清楚有沒有這個屬性的值width=device-width,若是沒有請當即加上吧!

如何解決iOS 4.3版本中safari對頁面中5位數字的自動識別和自動添加樣式

新的iOS系統也就是4.3版本,升級後對safari形成了一個bug:即便你添加了以下的meta標籤,safari仍然會對頁面中的5位連續的數字進行自動識別,而且將其從新渲染樣式,也就是說你的css對該標籤是無效的。

<meta name="format-detection" content="telphone=no" />

咱們能夠用一個比較齷齪的辦法來解決。好比說支付寶wap站點中顯示金額的標籤,咱們都作了以下改寫:

<button class="t-balance"style="background:none;padding:0;border:0;">95009.00</button>元

參考http://stackoverflow.com/questions/4697908/html-select-control-disabled-in-android-webview-in-emulator

10、資源與工具

iOS5 Web調試工具iWebinspector iWebinpector screenshot

http://www.iwebinspector.com/

html5與css3技術應用評估

http://html5please.com/

各類奇妙的hack

http://browserhacks.com/

幾乎全部設備的屏幕尺寸與像素密度表

http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density

ios端移動設備參數速查

http://ivomynttinen.com/blog/the-ios-design-cheat-sheet-volume-2/

瀏覽器兼容表

http://www.quirksmode.org/compatibility.html

移動設備查詢器

https://deviceatlas.com/device-data/devices

移動設備適配庫

http://51degrees.codeplex.com/

viewport與設備尺寸在線檢測器

https://deviceatlas.com/device-data/devices

html5移動端兼容性速查

http://mobilehtml5.org/

在線轉換字體

http://www.fontsquirrel.com/tools/webfont-generator

css3選擇器測試

http://tools.css3.info/selectors-test/test.html

兼容性速查表

http://caniuse.com/

瀏覽器的一些獨特參數

http://www.browserscope.org/

各類各樣的媒體查詢收集

http://nmsdvid.com/snippets/

css3動畫在線製做器

http://ecd.tencent.com/css3/tools.html

css3漸變在線製做器

http://www.colorzilla.com/gradient-editor/

賽貝爾曲線在線製做器 http://cubic-bezier.com/#.17,.67,.83,.67flexbox在線製做器 http://the-echoplex.net/flexyboxes/ CSS3各類渲染效果在線工具(IE出品)

http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/see-also.htm

resize添加到收藏夾後,可直接在瀏覽器中出現各類分辨率的選擇工具來查看不一樣分辨率下的頁面效果

http://lab.maltewassermann.com/viewport-resizer/

移動端手勢表

http://ww1.sinaimg.cn/bmiddle/c2c57f68jw1e4fh7dmw12j20fi2w6qe1.jpg

webkit獨有的樣式分析

http://ued.ctrip.com/blog/wp-content/webkitcss/

11、moble web前端開發(事件處理)

經過前兩篇文章,咱們已經瞭解了mobile上的基本事件模型,這篇文章咱們主要講一下Tangram Mobile的事件。Tangram Mobile 究竟包含那些事件呢,爲何要開發這些事件?平時咱們在開發的時候可能會須要一些較複雜的事件,例如雙擊屏幕事件、長按事件或者 滑動事件,這些事件並非標準事件,瀏覽器並無響應的實現,因此咱們須要本身來實現這些事件。

on和un

Tangram Mobile裏的事件,例以下面的tap、dbtap、taphold、swipe、pinch等事件都是組合事件, 那什麼是組合事件呢,就是說每一個事件都是經過多個事件模型組合而成的,例如tap事件是經過使用ontouchstart、 ontouchmove和ontouchend事件來完成的,這樣咱們須要經過特殊的on函數和un函數來添加事件監聽器和移除 事件監聽器,例如

baidu.event.on(element, 'tap', fn); baidu.event.un(element, 'tap', fn);

on和un函數除了能夠處理Tangram Mobile的自定義事件,還能夠處理標準事件,咱們能夠這樣用, baidu.event.on(element, 'touchstart', fn); baidu.event.un(element, 'touchstart', fn);

tap事件

觸摸單擊事件,通常狀況咱們能夠經過ontouchstart或者ontouchend來完成單擊的事件,那爲何還須要 這個tap事件呢,咱們先來解釋下這個tap事件是怎麼工做的,你們就會知道什麼狀況下須要用這個tap事件了, 當咱們按下手指並快速擡起的時候纔會觸發tap事件,也就是說當咱們按下手指後移動手指再離開或者按下手指 好久再離開都不會觸發tap事件。

tap event

這樣定義tap事件是爲了把tap事件和dbtap、taphold和scroll等事件區分開。 區分開有什麼好處呢,例如當咱們按下手指想滑動頁面查看頁面其餘區域的時候不當心滑到一個button,若是咱們這個button只註冊了ontouchstart 或者ontouchend,這時候它會觸發touch事件,可是這明顯不是咱們想要的,可是當咱們給這個button添加tap 事件就不會發生這種狀況,咱們能夠經過這種方式來添加tap事件,

baidu.event.on(button, 'tap', fn);

dbtap事件

觸摸雙擊事件,咱們知道再mobile設備上onclick事件是可使用的,那麼ondbclick事件呢,你們能夠試一下, 結果是不支持的,那麼咱們就須要本身開發一個雙擊事件,

dbtap event

咱們能夠經過這種方式來添加dbtap事件,

baidu.event.on(button, 'dbtap', fn);

咱們能夠經過設置dbtapThreshold來改變雙擊間隔時間,默認是250ms

baidu.event.dbtapThreshold = 250;

taphold事件

觸摸長按事件 taphold event 咱們能夠經過這種方式來添加taphold事件,

baidu.event.on(button, 'taphold', fn);

咱們能夠經過設置tapholdThreshold來改變長按時間,默認是600ms

baidu.event.tapholdThreshold = 600;

swipe事件

觸摸滑動事件,手指按住屏幕左右滑動的時候會觸發事件,相冊功能常常會用到這個事件, 當用戶向左或向右滑動的時候,翻到相應的圖片,咱們能夠經過這種方式來添加swipe事件,

baidu.event.on(element, 'swipe', function(e){ //e.direction 滑動方向 //e.distance 滑動絕對距離 //e.delta 滑動距離 });

咱們能夠經過event事件的direction來獲取滑動方向,或者distance來得到滑動距離 咱們能夠經過設置swipeTiggerThreshold來設置左右滑動n像素觸發swipe事件,默認是20

baidu.event.swipeTiggerThreshold = 20;

pinch事件

雙手指放大/縮小/旋轉事件,封裝gesture三個事件,同時在pinch時屏蔽touch的三個事件,

pinch event

咱們能夠經過這種方式來添加pinch事件,

baidu.event.on(element, 'pinch', function(e){ //e.rotation 手指的旋轉角度 //e.scale 放縮的值 });

turn事件

旋轉屏幕事件, 若是是iphone,咱們能夠直接使用orientationchange事件,可是anroid有些低版本 並不支持orientationchange,咱們可使用onrisize事件,android有些版本旋轉後得不到準確的 innerHeight和innerWidth,咱們能夠經過setTimeout修復它,使用turn事件能夠不用考慮以上問題, 咱們能夠經過這種方式來添加turn事件,

baidu.event.on(element, 'turn', function(e){ //e.orientation 當前翻轉狀態 });

兼容PC瀏覽器(Safari)

Tangram Mobile的事件兼容PC(safari)瀏覽器,兼容pc瀏覽器有什麼好處呢?這裏主要是考慮在mobile下 調試比較麻煩,目前的調試方法都不太方便,那若是兼容pc後,你們就可使用pc上的調試工具來調試。那麼 是如何作到兼容pc的呢,主要是把touch事件適配成mouse事件,

getCompat = function(elem, evtName) { var _compat = { "touchstart": { name: 'mousedown', element: elem }, "touchmove": { name: 'mousemove', element: document }, "touchend": { name: 'mouseup', element: elem } }, _event = { name: evtName, element: elem }; _event = (baidu.browser.isSupportTouch ? _event : _compat[evtName]) || _event; return _event; };

在on和un方法裏面,會調用這個getCompat方法,來適配相應的事件和對象。

fire、fireMouseEvent、fireCustomEvent

fire方法能夠觸發各類類型的事件,包括KeyEvents、MouseEvents、HTMLEvents、UIEvents, fireMouseEvent主要是觸發MouseEvents(包括touch事件),fireCustomEvent能夠觸發組合 事件,例如tap、dbtap、taphold、turn等事件。

相關文章
相關標籤/搜索