簡述移動端與PC端的區別


1、移動端與PC端的區別

  • PC考慮的是瀏覽器的兼容性,而移動端開發考慮的更多的是手機兼容性,因為目前不管是android手機還是ios手機,一般瀏覽器使用的都是webkit內核,所以說做移動端開發,更多考慮的應該是手機分辨率的適配,和不同操作系統的略微差異化;
  • 在部分事件的處理上,移動端多出來的事件是觸屏事件,而缺少的是hover事件。 另外包括移動端彈出的手機鍵盤的處理,這樣的問題在PC端都是遇不到的;
  • 在布局上,移動端開發一般是要做到布局自適應的;
  • 在動畫處理上,PC端由於要考慮IE的兼容性,所以通常使用JS做動畫的通用性會更好一些,但是CSS3做了很大的犧牲, 而在手機端,如果要做一些動畫、特效等,第一選擇肯定是CSS3, 既簡單、效率又高;
  • 一般pc端用jquery,移動端用zepto,因為移動端的流量還是比較重要的, 所以引入的資源或者插件,能小則小,一個30k的資源和一個80k的資源,在移動端的差別還是挺大的;(而未壓縮的jquery是262kb, 壓縮的jquey是83kb,可見兩者的差別之大。)
  • 比如在手機上的300ms的延遲,這在PC端是沒有的;

2、如何解決移動端click屏幕產生200-300ms的延遲響應問題?

  • 產生的原因:

    當用戶一次點擊屏幕之后,瀏覽器並不能立刻判斷用戶是要進行雙擊縮放,還是想要進行單擊操作。因此,iOS Safari 就等待 300 毫秒,以判斷用戶是否再次點擊了屏幕。

    於是,300 毫秒延遲就這么誕生了。

  • 造成的問題:按鈕點擊延遲或者按鈕點擊失效;
  • 解決方案:
    • 禁用縮放  meta標簽
    • 更改默認的視口寬度
    • fastClick.js (常見)
      步驟一:引入js文件:
      步驟二:引入下面任何一種js代碼
      //第一種 最好在body前面引入下面的代碼 if ('addEventListener' in document) { document.addEventListener('DOMContentLoaded', function() { FastClick.attach(document.body); }, false); } //第二種:引入jquery組件 $(function() { FastClick.attach(document.body); }) //第三種 window.addEventListener( "load", function() { FastClick.attach( document.body ); }, false );
    • touch.js
    • zepto (做移動端的DOM操作 但是做移動端事件的時候非常不建議用zepto里面的touch模塊,即用tap事件來取代click事件,因為tap事件會有 “點透” 問題)
                jquery是作用於pc端   277kb
                zepto作用於移動端    56kb
      • 點透:https://www.cnblogs.com/cdwp8/p/4307855.html
        • 概念:列表頁面上創建一個彈出層,彈出層有個關閉按鈕,你點了這個按鈕關閉彈出層后后,這個按鈕正下方的內容也會執行點擊事件(或打開鏈接)。
        • 出現的原因:
          可以看出zepto的tap通過兼聽綁定在document上的touch事件來完成tap事件的模擬的,及tap事件是冒泡到document上觸發的,
          再點擊完成時的tap事件(touchstart\touchend)需要冒泡到document上才會觸發,而在冒泡到document之前,用戶手的接觸屏幕(touchstart)
          和離開屏幕(touchend)是會觸發click事件的,因為click事件有延遲觸發(這就是為什么移動端不用click而用tap的原因)(大概是300ms,
          為了實現safari的雙擊事件的設計),所以在執行完tap事件之后,彈出來的選擇組件馬上就隱藏了,此時click事件還在延遲的300ms之中,
          當300ms到來的時候,click到的其實不是完成而是隱藏之后的下方的元素,如果正下方的元素綁定的有click事件此時便會觸發,
          如果沒有綁定click事件的話就當沒click,但是正下方的是input輸入框(或者select選擇框或者單選復選框),點擊默認聚焦而彈出輸入鍵盤,
          也就出現了上面的點透現象。
        • 解決方法:
          • 用click事件取代tap事件,在引入fastclick.js解決300ms延遲;(終極方案)
          • 來得很直接github上有個fastclick可以完美解決https://github.com/ftlabs/fastclick
            • 引入fastclick.js,因為fastclick源碼不依賴其他庫所以你可以在原生的js前直接加上;
              window.addEventListener( "load", function() {
                  FastClick.attach( document.body );
              }, false );
            • 或者有zepto或者jqm的js里面加上;
              $(function() {
                  FastClick.attach(document.body);
              });
            • 當然require的話就這樣;
              var FastClick = require(‘fastclick‘);
              FastClick.attach(document.body, options);
          •  touchend代替tap事件並阻止掉touchend的默認行為preventDefault();
            $("#cbFinish").on("touchend", function (event) {
                //很多處理比如隱藏什么的
               event.preventDefault();
            });
          • 延遲一定的時間(300ms+)來處理事件;
            $("#cbFinish").on("tap", function (event) {
                setTimeout(function(){
                //很多處理比如隱藏什么的
                 },320);
            });    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM