1.前言
到目前為止,網際網路行業裡,手機越來越智慧化,移動端佔有的比例越來越高,尤其實在電商,新聞,廣告,遊戲領域。使用者要求越來越高,網站功能越來越好,效果越來越炫酷,這就要求我們產品質量越來越高,web前端開發而言是一個挑戰,是一個難題,也是一個機遇。如何讓我們所開發的手機頁面能有更好的互動體驗,就是這篇文章的主旨:移動web開發問題和優化小結
2.Meta標籤
頁面在手機上顯示時,增加這個meta可以讓頁面強制讓文件的寬度與裝置的寬度保持1:1,並且文件最大的寬度比例是1.0,且不允許使用者通過點選或者縮放等操作對螢幕放大瀏覽。(這個在ios10以上的版本已經失效了,即使加了下面的meta,使用者雙擊,縮放還是可以縮放頁面。)
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />
複製程式碼
禁止ios上自動識別電話
<meta content="telephone=no" name="format-detection" />
複製程式碼
禁止android上自動識別郵箱
<meta content="email=no" name="format-detection" />
複製程式碼
下面兩個是針對ios上的safari上位址列和頂端樣式條的
<meta name="apple-mobile-web-app-capable" content="yes" />
<!-- 聽說在ios7以上版本就沒效果了 -->
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<!-- 可選default、black、black-translucent 但是我都是用black-->
複製程式碼
3.打電話發簡訊
<a href="tel:020-11811922">打電話給:0755-10086</a>
<a href="sms:10086">發簡訊給: 10086</a>
複製程式碼
4.css3過渡動畫開啟硬體加速
ps:網上有說這個用了,手機的耗電量也會增加。我自己也在手機上粗略試過,確實有那麼一回事,平常看部落格,5分鐘左右少1%,用了硬體加速3分鐘左右就少1%,大家注意合理使用。
.translate3d{
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
複製程式碼
順便說下動畫或者過渡的兩個建議: 1.在手機上(其實PC也是一樣)。CSS3動畫或者過渡儘量使用transform和opacity來實現動畫,不要使用left和top。 2.動畫和過渡能用css3解決的,就不要使用js。如果是複雜的動畫可以使用css3+js(或者html5+css3+js)配合開發,效果只有想不到,沒有做不到。
5.移動端click螢幕產生200-300 ms的延遲響應
click事件因為要等待確認是否是雙擊事件,會有300ms的延遲(兩次點選事件間隔小於300ms就認為是雙擊),體驗並不好。 現在的解決方案,第一個就是採用touchstart或者touchend代替click。或者封裝tap事件來代替click 事件,所謂的tap事件由touchstart事件+ touchmove(判斷是否是滑動事件)+touchend事件封裝組成。
6.圖片優化
6-1.base64編碼圖片替換url圖片
這個應該沒什麼好解釋的,就是能不發請求的就不要發,對於一些小圖示(我這做法是把8K以下的圖示都轉換成base64)之類的,可以將圖片用base64,來減少請求的傳送。尤其是在移動端,請求顯得特別珍貴,在網速的不好的情況下,請求就是珍貴中的珍貴。
6-2.圖片壓縮
對於整個網站來說,圖片是最佔流量的資源之一,能不使用就不適用,圖示可是使用base64編碼,字型圖示代替,SVG等來代替,使用就要選擇最合適的格式,合適的尺寸,然後壓縮--這裡推薦騰訊推出的智圖。 PS:過度壓縮圖片大小影響圖片顯示效果,可能會使得圖片變得模糊,一般來說,品質在60左右就差不多了!
6-3.圖片懶載入
首屏載入的快慢,直接影響使用者的體驗,建議將非首屏的圖片資源放到使用者需要時才載入。這樣可以大大優化首屏載入,減少首屏載入所需要的時間! ps:懶載入要使用js頻繁操作dom,期間會導致大量重繪渲染,影響效能。
6-4.img還是background
圖片的展示方式有兩種,一種是以圖片標籤顯示,一種是以背景圖片顯示!下面寫了這兩者的區別。 img:html中的標籤img是網頁結構的一部分會在載入結構的過程中和其他標籤一起載入。 background:以css背景圖存在的圖片background會等到結構載入完成(網頁的內容全部顯示以後)才開始載入 也就是說,網頁會先載入標籤img的內容,再載入背景圖片background引用的圖片。 引入一張圖片,那麼在這個圖片載入完成之前,img後的內容不會顯示。而用background來引入同樣的圖片,網頁結構和內容載入完成之後,才開始載入背景圖片,網頁內容能正常瀏覽,但是看不到背景圖片。至於這兩種,大家按照習慣,需求等權重因素選擇!
7.快速回彈滾動
在ios上,如果存在區域性滾動,就要加這個屬性了!如果不加,滾動會很慢,看起來也會有一卡一卡的感覺。
-webkit-overflow-scrolling: touch;
複製程式碼
但是,加上了這個,在ios上會產生bug。(慎用)
8.謹慎使用fixed
ios下fixed元素容易定位出錯,軟鍵盤彈出時,影響fixed元素定位,會發生元素錯位(滾動一下又恢復),有時候會出現閃屏的效果. 所以在手機上,不建議用fixed定位,使用absolute代替!如果一定要用,寫好了之後,一定要多測試幾次!
9.消除transition閃屏
10.ios系統中去掉元素被觸控時產生的半透明灰色遮罩
a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0;)}
複製程式碼
11.ios中去掉預設input預設樣式
input,button,textarea{-webkit-appearance: none;}
複製程式碼
12.左右滑動,避免頁面跟著滑動(暫未解決)
根據touchstart和touchend的移動距離來判斷是左右滑動或者上下滑動!