天天看點

移動web開發經驗與常見問題總結

1.1 移動web

1.1.1 三種布局

  • 有最大、最小寬度的百分比自适應布局

    适用場景:門戶網站首頁,圖檔較多的首頁。

  • 百分比自适應布局

    适用場景:資訊文字較多的網頁,内容較多網頁。

  • 全屏自适應布局

    适用場景:單頁面網頁,移動web app 頁面。

1.1.2 Box-sizing在移動端的使用

在百分比定寬的頁面經常使用。

*,
::before,
::after{
    -webkit-box-sizing: border-box;
/*以你的border開始計算你的寬度*/
}
           

1.2 移動端事件

Touch

  • touchstart:當手指觸碰螢幕時候發生。不管目前有多少隻手指
  • touchmove:當手指在螢幕上滑動時連續觸發。通常我們再滑屏頁面,

    會調用event的preventDefault()可以阻止預設情況的發生:阻止頁面滾動

  • touchend:當手指離開螢幕時觸發
  • touchcancel:系統停止跟蹤觸摸時候會觸發。

    例如在觸摸過程中突然頁面alert()一個提示框,此時會觸發該事件,這個事件比較少用

觸摸事件的響應順序

1、ontouchstart

2、ontouchmove

3、ontouchend

4、onclick 300ms延時

Event

  • originalEvent (原生事件) 是jquery 封裝的事件。
  • targetTouches 目标元素的所有目前觸摸
  • changedTouches 頁面上最新更改的所有觸摸
  • touches 頁面上的所有觸摸

clientX、clientY 相對于目前螢幕的X或Y位置

pageX、pageY 相對于整體頁面的X或Y位置

  • transitionEnd 過渡結束事件。
  • animationEnd 動畫結束事件

移動端事件架構

例如 zepto touch.js

'swipe', 
'swipeLeft', 
'swipeRight', 
'swipeUp',
'swipeDown',
  'doubleTap', 
'tap', 
'singleTap', 
'longTap'
           

都是由我們的原生touch事件封裝的。

1.3 常見的移動端問題

1.3.1 什麼是Retina 顯示屏,帶來了什麼問題

retina:一種具備超高像素密度的液晶屏,同樣大小的螢幕上顯示的像素點由1個變為多個,如在同樣帶下的螢幕上,蘋果裝置的retina顯示屏中,像素點1個變為4個。在高清顯示屏中的位圖被放大,圖檔會變得模糊,是以移動端的視覺稿通常會設計為傳統PC的2倍。

那麼,前端的應對方案是:

設計稿切出來的圖檔長寬保證為偶數,并使用backgroud-size把圖檔縮小為原來的1/2

//例如圖檔寬高為:200px*200px,那麼寫法如下
.css{width:px;height:px;background-size:px px;}
//其它元素的取值為原來的1/2,例如視覺稿40px的字型,使用樣式的寫法為20px
.css{font-size:px}
           

1.3.2 百度禁止轉碼

通過百度手機打開網頁時,百度可能會對你的網頁進行轉碼,往你頁面貼上它的廣告,非常之惡心。不過我們可以通過這個meta标簽來禁止它:

1.3.3 移動端手機号碼識别(IOS)

在 iOS Safari (其他浏覽器和Android均不會)上會對那些看起來像是電話号碼的數字處理為電話連結,比如:

  • 7位數字,形如:1234567
  • 帶括号及加号的數字,形如:(+86)123456789
  • 雙連接配接線的數字,形如:00-00-00111
  • 11位數字,形如:13800138000
  • 可能還有其他類型的數字也會被識别。我們可以通過如下的meta來關閉電話号碼的自動識别:
<meta name="format-detection" content="telephone=no" />
開啟電話功能
<a href="tel:123456">123456</a>
開啟短信功能:
<a href="sms:123456">123456</a> 
           

1.3.4 移動端郵箱識别(Android)

與電話号碼的識别一樣,在安卓上會對符合郵箱格式的字元串進行識别,我們可以通過如下的meta來管别郵箱的自動識别:

<meta content="email=no" name="format-detection" /> 
同樣地,我們也可以通過标簽屬性來開啟長按郵箱位址彈出郵件發送的功能:
<a mailto:[email protected]">[email protected]</a> 
           

1.3.5 ios系統中元素被觸摸時産生的半透明灰色遮罩怎麼去掉

ios使用者點選一個連結,會出現一個半透明灰色遮罩, 如果想要禁用,可設定-webkit-tap-highlight-color的alpha值為0,也就是屬性值的最後一位設定為0就可以去除半透明灰色遮罩。

{-webkit-tap-highlight-color: rgba(,,,;)}

1.3.6   webkit表單元素的預設外觀怎麼重置
.css{-webkit-appearance:none;}
           

1.3.7 禁止文本縮放

當移動裝置橫豎屏切換時,文本的大小會重新計算(或者在内嵌浏覽器中設定字型的大小),進行相應的縮放,當我們不需要這種情況時,可以選擇禁止:

html {
  -webkit-text-size-adjust: %;
}
           

1.3.8 移動端禁止選中内容

如果你不想使用者可以選中頁面中的内容,那麼你可以在css中禁掉:

.user-select-none {
  -webkit-user-select: none;
}
           

1.3.9 如何禁止儲存或拷貝圖像(IOS)

通常當你在手機或者pad上長按圖像 img ,會彈出選項存儲圖像 或者拷貝圖像,如果你不想讓使用者這麼操作,那麼你可以通過以下方法來禁止:

1.3.10 搖一搖功能

HTML5 deviceMotion:封裝了運動傳感器資料的事件,可以擷取手機運動狀态下的運動加速度等資料。

1.3.11 android 上去掉語音輸入按鈕

input::-webkit-input-speech-button {display: none}
           

1.3.12 移動端基礎架構

zepto.js文法與jquery幾乎一樣,會jquery基本會zepto;

搭配

backbone underscore

http://daneden.github.io/animate.css/ 動畫css