解決移動端點擊事件延遲300ms

轉自:http://blog.csdn.net/xdongll/article/details/51908994

說明:移動設備上的web網頁是有300ms延遲的,玩玩會造成按鈕點擊延遲甚至是點擊失效。 

以下是歷史原因,來源一個公司內一個同事的分享: 2007年蘋果發佈首款iphone上IOS系統搭載的safari爲了將適用於PC端上大屏幕的網頁能比較好的展示在手機端上,使用了雙擊縮放(double tap to zoom)的方案,比如你在手機上用瀏覽器打開一個PC上的網頁,你可能在看到頁面內容雖然可以撐滿整個屏幕,但是字體、圖片都很小看不清,此時可以快速雙擊屏幕上的某一部分,你就能看清該部分放大後的內容,再次雙擊後能回到原始狀態。 雙擊縮放是指用手指在屏幕上快速點擊兩次,iOS 自帶的 Safari 瀏覽器會將網頁縮放至原始比例。 原因就出在瀏覽器需要如何判斷快速點擊上,當用戶在屏幕上單擊某一個元素時候,例如跳轉鏈接,此處瀏覽器會先捕獲該次單擊,但瀏覽器不能決定用戶是單純要點擊鏈接還是要雙擊該部分區域進行縮放操作,所以,捕獲第一次單擊後,瀏覽器會先Hold一段時間t,如果在t時間區間裏用戶未進行下一次點擊,則瀏覽器會做單擊跳轉鏈接的處理,如果t時間裏用戶進行了第二次單擊操作,則瀏覽器會禁止跳轉,轉而進行對該部分區域頁面的縮放操作。那麼這個時間區間t有多少呢?在IOS safari下,大概爲300毫秒。這就是延遲的由來。造成的後果用戶純粹單擊頁面,頁面需要過一段時間才響應,給用戶慢體驗感覺,對於web開發者來說是,頁面js捕獲click事件的回調函數處理,需要300ms後才生效,也就間接導致影響其他業務邏輯的處理。 

//解決方案: fastclick可以解決在手機上點擊事件的300ms延遲 zepto的touch模塊,tap事件也是爲了解決在click的延遲問題



一、tap.js解決方案

[html] view plain copy
  1. <script src="tap.js"></script>  
  2.   
  3. <div id="container">  
  4.   <button id="button-1">Click event</button>  
  5.   <button id="button-2">Tap event</button>  
  6. </div>  
  7.   
  8. <div id="output"></div>  
  9.   
  10. <script>  
  11.   var container = document.getElementById('container')  
  12.   var button1 = document.getElementById('button-1');  
  13.   var button2 = document.getElementById('button-2');  
  14.   var output = document.getElementById('output');  
  15.   
  16.   var tap = new Tap(container);  
  17.   
  18.   button1.addEventListener('click', callback, false);  
  19.   button2.addEventListener('tap', callback, false);  
  20.   
  21.   function callback (e) {  
  22.       e.preventDefault();  
  23.       var p = document.createElement('p');  
  24.       p.textContent = 'event: ' + e.type;  
  25.       output.insertBefore(p, output.firstChild);  
  26.   }  
  27. </script>  


二、fastclick.js解決方法


[html] view plain copy
  1. <html xmlns="http://www.w3.org/1999/xhtml">  
  2. <head>  
  3.     <title></title>  
  4.     <style>  
  5.         *  
  6.         {  
  7.             margin: 0;  
  8.         }  
  9.         body  
  10.         {  
  11.         }  
  12.         .button  
  13.         {  
  14.             background-color: #3d3d3d;  
  15.             border: 0px;  
  16.             height: 80px;  
  17.             width: 80%;  
  18.             font-size: 50px;  
  19.             margin: 10% 0% 0% 10%;  
  20.             color: #fff;  
  21.         }  
  22.         .fu  
  23.         {  
  24.             min-height: 100%;  
  25.             min-width: 100%;  
  26.             background-color: Black;  
  27.             background: rgba(0,0,0,0.4);  
  28.             position: absolute;  
  29.             top: 0;  
  30.             text-align: center;  
  31.             display: none;  
  32.         }  
  33.         .ts  
  34.         {  
  35.             margin: 8% auto;  
  36.             width: 400px;  
  37.             height: 400px;  
  38.             top: 59%;  
  39.             background-color: #fff;  
  40.             text-align: center;  
  41.         }  
  42.     </style>  
  43.     <script src="fastclick.js" type="text/javascript"></script>  
  44.     <script src="jquery-1.7.2.js" type="text/javascript"></script>  
  45.     <script type="application/javascript">  
  46.         window.addEventListener('load', function () {  
  47.             FastClick.attach(document.body);  
  48.         }, false);  
  49.         function xian() {  
  50.      
  51.             $(".fu").show().hide(350);  
  52.         }  
  53.     </script>  
  54. </head>  
  55. <body>  
  56.     <div>  
  57.         <div class="but">  
  58.             <input class="button" type="button" value="點擊我" onclick="xian()" /></div>  
  59.         <div class="fu" >  
  60.             <div class="ts">  
  61.                 我是浮層  
  62.             </div>  
  63.         </div>  
  64.     </div>  
  65. </body>  
  66. </html>  
發佈了73 篇原創文章 · 獲贊 17 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章