1. 程式人生 > >移動端互動優化

移動端互動優化

1 點選:移動端的click事件有300ms的延遲
    目的:區分單擊與雙擊事件(300ms內點選一次是單擊,點選2次是雙擊)
    解決方案:引入移動框架如zepto,用tab事件代替click
        tab:不是原生事件,touchstart\touchmove\touchend模擬出來的事件
                                    基本條件
               1、從觸控到離開時間間隔短
               2、從起點到終點的距離小
                                    點選態
                                           給使用者明確的點選反饋,提升使用者體驗
               方案1:使用:active偽類
                             缺點:滾動的時候也會觸發樣式
               方案2:js模型點選態(推薦)
                    //點選事件帶點選態
                    $el.on('tap',function(e){
                    var $target=$(e.target);
                    $target.addClass('active');
                    setTimeout(function(){
                    $target.removeClass('active');
                    },150);
                    });
2 滾動
 1 彈性滾動
  全域性滾動:滾動條在dom節點或更頂層
  區域性滾動:滾動條在body下的某一個dom節點上
  彈性滾動:
  IOS:全域性滾動:預設支援
      區域性滾動:預設沒有滾動條,且滾動起來乾澀
      IOS區域性滾動啟動彈性滾動效果
      body{-webkit-overflow-scrolling:touch;}
      區域性滾動的dom節點
      .scroll-el{overflow:auto;}
      建議:將屬性掛在body上,可以避免很多奇怪的bug
  Android:
      定製版本較多,瀏覽器表現各異
      預設沒有彈性滾動效果
      -webkit-overflow-scrolling:預設瀏覽器不支援,android上的chrome版本支援
 2 出界
            什麼時候觸發出界
       IOS:全域性滾動:滾動帶頁面頂部(或底部)時繼續向下(向上)滑動,就會出現
                                 區域性滾動:滾動帶頁面頂部(或底部)時,手指離開停下,再繼續向下(向上)滑動,就會出現
       IOS解決方案
            區域性滾動:使用scrollFix
            if(startTopScroll<=0)
            elem.scrollTop=1;
               if(startTopScroll+elem.offsetHeight>=elem.scrollHeight)
                    elem.scrollTop=elem.scrollHeight-elem.scrollHeight-1;
                                           頁面的固定區域禁止touchmove預設事件
                                全域性滾動
                                           暫時沒有好的解決辦法,可以考慮將全域性滾動改為區域性滾動
                                           好訊息:從IOS8開始safari的出界部分的背景色和body的背景色保持一致
       Adroid解決方案(使用全域性滾動)
       
    流暢滾動的N條軍規
   1 body上加上-webkit-overflow-scrolling:touch;
   2 IOS儘量使用區域性滾動
   3 IOS使用scrollFix避免出界
   4 IOS下帶有滾動條且position:absolute的節點不要設定背景色
   5 Android下儘量使用全域性滾動
     1)儘量不用overflow:auto
     2)使用min-height:100%代替height:100%
 
3 定製軟鍵盤樣式:
   配置input節點的type型別
    電子郵件input型別:<input type="email" name="email">    
          URL input 型別:<input type="url" name="url">    
  電話號碼input型別:<input type="tel" name="tel">
  數字input型別:<input type="number" name="number">
  日期input型別:<input type="date" name="date">
  時間input型別:<input type="time" name="time">
  日期和時間input型別:<input type="datetime" name="datetime">
  月份input型別:<input type="month" name="month">
  搜尋input型別:<input type="search" name="search">注:用一個form包圍起來,在onsubmit事件裡面阻止預設行為  
             純數字鍵盤:<input type="text" pattern="[0-9]*" />注:其他pattern屬性值並不支援
定製軟鍵盤行為:
             配置節點的autocapitalize=off(on)、autocorrect=off(on)屬性 

IOS基本支援,Android不同系統版本不同定製版本支援情況不一樣(不支援情況下,彈出預設鍵盤樣式)