欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

移動端腳本框架Hammer.js

 更新時間:2016年12月15日 09:36:07   作者:A_山水子農(nóng)  
這篇文章主要為大家詳細介紹了一款開源的移動端腳本框架Hammer.js,可以完美的實現(xiàn)在移端開發(fā)的大多數(shù)事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、前言

  移動端框架當前還處在初級階段,但相對于移動端的應用來說已經(jīng)有很長時間了。雖然暫時還沒有PC端開發(fā)的需求量大,但移動端的Web必然是一種趨勢,在接觸移動端腳本的過程中,最開始想到的是juqery。Jquery2.0版本及以上已經(jīng)開始偏向移動端,如對h5的支持,但支持還是不夠完善,希望jq在后面的版本能夠逐漸支持起來。

  最初在開發(fā)移動端Web的時候使用w3c標準的語法結(jié)構(gòu)和原生的js開發(fā),但相對來說開發(fā)量比較大,而且每一步都要考慮各移動端瀏覽器的兼容,像比較讓程序員頭痛的大wp手機,很多事件都向w3c申請單獨的標準。因此一個好的兼容性架構(gòu)對于開發(fā)者來說可以節(jié)省很大一部分工作量。

  剛開始接觸移動端框架之初也問了一些一直搞前端的朋友,大部份都在百度阿里等工作。參考大家的建議后我們做項目使用了zepto.js(很多搞前端的朋友應該并不陌生)。這個框架有個很大的問題就是不兼容wp手機,使用zepto.js開發(fā)完項目后,再針對wp手機兼容做調(diào)整總感覺有些“得不償失”,后來咨詢了些朋友,他們所在的公司在開發(fā)的時候基本都放棄wp的兼容(我只能對wp說“呵呵”了)。后面就咨詢到有用hammer.js進行開發(fā)的。我們研究了下,hammer.js輕量級,封裝的也比較好。用起來也很方便。兼容性也不錯。但網(wǎng)上中文資料比較少,園子寫hammer的就更少了。因此有了這篇文章。

  此文章基于hammer.js 官網(wǎng):http://hammerjs.github.io/ ,版本基于v2.0.4。如果該文章的api已過期,請自行到官網(wǎng)查詢最新api。此文章只做入門使用。

二、hammer.js是什么

  hammer.js是一款開源的移動端腳本框架,他可以完美的實現(xiàn)在移端開發(fā)的大多數(shù)事件,如:點擊、滑動、拖動、多點觸控等事件。不需要依賴任何其他的框架,并且整個框架非常小,\在使用時非常簡單,代碼示例如下:

<div id="test" class="test"></div> 
  <script type="text/javascript"> 
    //創(chuàng)建一個新的hammer對象并且在初始化時指定要處理的dom元素 
    var hammertime = new Hammer(document.getElementById("test")); 
    //為該dom元素指定觸屏移動事件 
    hammertime.on("pan", function (ev) { 
     //控制臺輸出 
     console.log(ev); 
    }); 
</script> 

三、事件架構(gòu)

 hammer.js主要針對觸屏的6大事件進行監(jiān)聽。如下圖所示:

1、Pan事件:在指定的dom區(qū)域內(nèi),一個手指放下并移動事件,即觸屏中的拖動事件。這個事件在屏觸開發(fā)中比較常用,如:左拖動、右拖動等,如手要上使用QQ時向右滑動出現(xiàn)功能菜單的效果。該事件還可以分別對以下事件進行監(jiān)聽并處理:Panstart:拖動開始、Panmove:拖動過程、Panend:拖動結(jié)束、Pancancel:拖動取消、Panleft:向左拖動、Panright:向右拖動、Panup:向上拖動、Pandown:向下拖動。

2、Pinch事件:在指定的dom區(qū)域內(nèi),兩個手指(默認為兩個手指,多指觸控需要單獨設置)或多個手指相對(越來越近)移動或相向(越來越遠)移動時事件。該事件事以分別對以下事件進行監(jiān)聽并處理:Pinchstart:多點觸控開始、Pinchmove:多點觸控過程、Pinchend:多點觸控結(jié)束、Pinchcancel:多點觸控取消、Pinchin:多點觸控時兩手指距離越來越近、Pinchout:多點觸控時兩手指距離越來越遠。

3、Press事件:在指定的dom區(qū)域內(nèi)觸屏版本的點擊事件,這個事件相當于PC端的Click事件,該不能包含任何的移動,最小按壓時間為500毫秒,常用于我們在手機上用的“復制、粘貼”等功能。該事件分別對以下事件進行監(jiān)聽并處理: Pressup:點擊事件離開時觸發(fā)。

4、Rotate事件:在指定的dom區(qū)域內(nèi),當兩個手指或更多手指成圓型旋轉(zhuǎn)時觸發(fā)(就像兩個手指擰螺絲一樣)。該事件分別對以下事件進行監(jiān)聽并處理:Rotatestart:旋轉(zhuǎn)開始、Rotatemove:旋轉(zhuǎn)過程、Rotateend:旋轉(zhuǎn)結(jié)束、Rotatecancel:旋轉(zhuǎn)取消。

5、Swipe事件:在指定的dom區(qū)域內(nèi),一個手指快速的在觸屏上滑動。即我們平時用到最多的滑動事件。Swipeleft:向左滑動、Swiperight:向右滑動、Swipeup:向上滑動、Swipedown:向下滑動。

6、Tap事件:在指定的dom區(qū)域內(nèi),一個手指輕拍或點擊時觸發(fā)該事件(類似PC端的click)。該事件最大點擊時間為250毫秒,如果超過250毫秒則按Press事件進行處理。

  經(jīng)驗分享:寫到這個事件的時候有人必然要問了,在觸屏中我們使用Click事件不也可以嗎?這個Tap事件與Click事件有什么區(qū)別呢?博主也曾經(jīng)有過這樣的疑惑,起初在觸屏上處理點擊的時候也一直用的click事件,并且沒也有出現(xiàn)任何問題,直到有一天為一個公司做了微信版本的“連連看”小游戲,連連看的業(yè)務簡單來說就是屏幕上有很多圖片,當點擊兩個相同圖案的圖片時可以在中間產(chǎn)生連接線,并且產(chǎn)生爆破效果后消失。這個游戲剛開始做的時候是在ff瀏覽器上做的測試,鼠標點擊后效果非常流暢,但當游戲部署到服務器上并用手機端操作時,iphone和wp都非常流暢,安卓下不管怎么調(diào)都是有卡頓。起初以為是手機性能的問題,但換了高配手機后仍然會有卡頓,游戲也不是不能玩,就是反應慢。經(jīng)過多次的測試后排除了手機配置的硬件原因,開始懷疑click事件。經(jīng)過網(wǎng)上查閱后才得知,在安卓觸屏上,Tap事件和click事件可以同時觸發(fā),但click事件會有幾百毫秒的延遲,即先觸發(fā)Tap事件,過一段時間再觸發(fā)click事件。后來把游戲的所有click事件修改成Tap事件問題就自然解決了。

四、 使用實例

1、 Pan

代碼如下

 <!DOCTYPE html> 
 <html> 
 <head> 
   <meta name="viewport" content="width=device-width" /> 
   <title>Pan</title> 
   <script src="/Script/hammer.js"></script> 
   <style type="text/css"> 
     html, body { 
       width: 100%; 
       height: 100%; 
       margin: 0px; 
       padding: 0px; 
     } 
  
     .test { 
       width: 100%; 
      height: 50%; 
      background: #ffd800; 
       text-align: left; 
     } 
  
    .result { 
       width: 100%; 
       height: 50%; 
       background: #b6ff00; 
       text-align: left; 
     } 
   </style> 
 </head> 
 <body> 
   <div id="test" class="test">事件區(qū)域</div> 
   <div id="result" class="result">事件結(jié)果<br /></div> 
   <script type="text/javascript"> 
     //創(chuàng)建一個新的hammer對象并且在初始化時指定要處理的dom元素 
    var hammertime = new Hammer(document.getElementById("test")); 
     //添加事件 
    hammertime.on("pan", function (e) { 
       document.getElementById("result").innerHTML += "X偏移量:【" + e.deltaX + "】,Y偏移量:【" + e.deltaY + "】<br />"; 
       //控制臺輸出 
      console.log(e); 
     }); 
  </script> 
 </body> 
 </html> 

效果如下:

  

2、Pinch

代碼如下:

 <!DOCTYPE html> 
<html> 
 <head> 
   <meta name="viewport" content="width=device-width" /> 
 <title>Pinch</title> 
  <script src="/Script/hammer.js"></script> 
  <style type="text/css"> 
     html, body { 
      width: 100%; 
      height: 100%; 
      margin: 0px; 
      padding: 0px; 
    } 
    .test { 
      width: 100%; 
      height: 50%; 
      background: #ffd800; 
      text-align: left; 
    } 
    .result { 
      width: 100%; 
      height: 50%; 
      background: #b6ff00; 
      text-align: left; 
    } 
  </style> 
</head> 
<body> 
  <div id="test" class="test">事件區(qū)域</div> 
  <div id="result" class="result">事件結(jié)果:捏合觸發(fā)<br /></div> 
  <script type="text/javascript"> 
    //創(chuàng)建一個新的hammer對象并且在初始化時指定要處理的dom元素 
    var hammertime = new Hammer(document.getElementById("test")); 
    //為該dom元素指定觸屏移動事件 
    hammertime.add(new Hammer.Pinch()); 
    //添加事件 
    hammertime.on("pinchin", function (e) { 
      document.getElementById("result").innerHTML += "捏合初觸發(fā)<br />"; 
      //控制臺輸出 
      console.log(e); 
    }); 
  </script> 
</body> 
</html> 

效果如下: 

 

3、Press

代碼如下:

 <!DOCTYPE html> 
 <html> 
 <head> 
  <meta name="viewport" content="width=device-width" /> 
  <title>Press</title> 
   <script src="/Script/hammer.js"></script> 
   <style type="text/css"> 
    html, body { 
      width: 100%; 
       height: 100%; 
       margin: 0px; 
       padding: 0px; 
     } 
  
     .test { 
       width: 100%; 
      height: 50%; 
       background: #ffd800; 
       text-align: left; 
    } 
    .result { 
       width: 100%; 
       height: 50%; 
      background: #b6ff00; 
       text-align: left; 
     } 
   </style> 
 </head> 
 <body> 
   <div id="test" class="test">事件區(qū)域</div> 
   <div id="result" class="result">事件結(jié)果:按壓超過500ms觸發(fā)<br /></div> 
  <script type="text/javascript"> 
     //創(chuàng)建一個新的hammer對象并且在初始化時指定要處理的dom元素 
     var hammertime = new Hammer(document.getElementById("test")); 
    //添加事件 
    hammertime.on("press", function (e) { 
      document.getElementById("result").innerHTML += "超過500ms了<br />"; 
      //控制臺輸出 
      console.log(e); 
     }); 
   </script> 
</body> 
</html> 

效果如下:

 

4、Rotate

代碼如下:

 <!DOCTYPE html> 
 <html> 
<head> 
  <meta name="viewport" content="width=device-width" /> 
  <title>Rotate</title> 
  <script src="/Script/hammer.js"></script> 
  <style type="text/css"> 
    html, body { 
      width: 100%; 
      height: 100%; 
      margin: 0px; 
       padding: 0px; 
    } 
    .test { 
      width: 100%; 
       height: 50%; 
      background: #ffd800; 
       text-align: left; 
     } 
     .result { 
       width: 100%; 
       height: 50%; 
      background: #b6ff00; 
       text-align: left; 
     } 
  </style> 
 </head> 
 <body> 
  <div id="test" class="test">事件區(qū)域</div> 
<div id="result" class="result">事件結(jié)果:旋轉(zhuǎn)觸發(fā)<br /></div> 
  <script type="text/javascript"> 
    //創(chuàng)建一個新的hammer對象并且在初始化時指定要處理的dom元素 
     var hammertime = new Hammer(document.getElementById("test")); 
     //為該dom元素指定觸屏移動事件 
    hammertime.add(new Hammer.Rotate()); 
     //添加事件 
    hammertime.on("rotate", function (e) { 
       document.getElementById("result").innerHTML += "X偏移量:【" + e.deltaX + "】,Y偏移量:【" + e.deltaY + "】<br />"; 
       //控制臺輸出 
       console.log(e); 
     }); 
   </script> 
 </body> 
 </html> 

效果如下:

 

5、Swipe

代碼如下:

<!DOCTYPE html> 
<html> 
 <head> 
  <meta name="viewport" content="width=device-width" /> 
  <title>Swipe</title> 
  <script src="/Script/hammer.js"></script> 
  <style type="text/css"> 
    html, body { 
      width: 100%; 
       height: 100%; 
      margin: 0px; 
      padding: 0px; 
     } 
    .test { 
       width: 100%; 
      height: 50%; 
      background: #ffd800; 
       text-align: left; 
    } 
    .result { 
       width: 100%; 
      height: 50%; 
       background: #b6ff00; 
       text-align: left; 
    } 
  </style> 
 </head> 
 <body> 
   <div id="test" class="test">事件區(qū)域</div> 
  <div id="result" class="result">事件結(jié)果:向左滑動觸發(fā)<br /></div> 
   <script type="text/javascript"> 
    //創(chuàng)建一個新的hammer對象并且在初始化時指定要處理的dom元素 
     var hammertime = new Hammer(document.getElementById("test")); 
    //添加事件 
    hammertime.on("swipeleft", function (e) { 
      document.getElementById("result").innerHTML += "X偏移量:【" + e.deltaX + "】,Y偏移量:【" + e.deltaY + "】<br />"; 
       //控制臺輸出 
       console.log(e); 
     }); 
  </script> 
 </body> 
</html> 

效果如下: 

 

6、Tab

代碼如下:

<!DOCTYPE html> 
 <html> 
 <head> 
  <meta name="viewport" content="width=device-width" /> 
  <title>Tap</title> 
  <script src="/Script/hammer.js"></script> 
  <style type="text/css"> 
    html, body { 
       width: 100%; 
       height: 100%; 
       margin: 0px; 
      padding: 0px; 
     } 
    .test { 
       width: 100%; 
      height: 50%; 
       background: #ffd800; 
      text-align: left; 
     } 
    .result { 
       width: 100%; 
      height: 50%; 
      background: #b6ff00; 
      text-align: left; 
    } 
  </style> 
 </head> 
 <body> 
   <div id="test" class="test">事件區(qū)域</div> 
   <div id="result" class="result">事件結(jié)果:點擊觸發(fā)<br /></div> 
   <script type="text/javascript"> 
     //創(chuàng)建一個新的hammer對象并且在初始化時指定要處理的dom元素 
     var hammertime = new Hammer(document.getElementById("test")); 
    //添加事件 
     hammertime.on("tap", function (e) { 
      document.getElementById("result").innerHTML += "點擊觸發(fā)了,長按無效<br />"; 
       //控制臺輸出 
      console.log(e); 
     }); 
  </script> 
 </body> 
 </html> 

效果如下:

 

上述的實例還是有所區(qū)別的。在Pinch事件和Rotate事件中,我們用了hammertime.add(new Hammer.Pinch());和hammertime.add(new Hammer.Rotate ());而其他四個事件沒有用,而是直接添加了事件的監(jiān)聽程序。原因在于,我們在new Hammer(htmlElement)的時候,Hammer.js默認對Pan、Press、Swipe和Tab事件進行了監(jiān)聽。但沒有對Pinch和Rotate事件進行監(jiān)聽。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論