日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

hammer的初始化及移动端各种滑动

發布時間:2024/5/24 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 hammer的初始化及移动端各种滑动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:本人對hammer了解不是很多,早做項目時遇到了手機端的一些滑動事件,特此分析下hammer的某些屬性。

hammer.js是一款開源的移動端腳本框架,他可以完美的實現在移端開發的大多數事件,如:點擊、滑動、拖動、多點觸控等事件。Hammer.js不需要依賴任何其他的js框架,并且整個框架非常小,v2.0.4版本只有3.96kb。

1、hammer.js引用

可直接引入文件,也可以引入CDN地址。在這里,為了方便,我引入了JQuery框架。

hammer的在線CDN地址為:<script src="http://eightmedia.github.com/hammer.js/hammer.js"></script>

2.hammer的事件綁定

hammer的事件綁定方法是新建一個Hammer對象,并傳入要操作的DOM,必須使用原始DOM,即使用這兩種方法獲取DOM。

    var hammerObj=new Hammer(document.getElementById('main'));
    var hammerObj=new Hammer($('#main').get(0));

3、hammer支持的事件

pan事件

主要支持在當前dom區域內的一個手指放下并移動事件,即屏幕滑動事件,其中包括左滑動、右滑動、上滑動、下滑動,該事件還可以對以下事件進行監聽或處理:

panstart:拖動開始、panmove:拖動過程、panend:拖動結束、pancancel:拖動取消、panleft:向左拖動、panright:向右拖動、panup:向上拖動、pandown:向下拖動

panstart事件

會在event對象中輸出滑動開始的坐標

panmove事件

一次滑動會觸發多次panmove事件,會在direction中輸出方向,當direction等于16時,為向下滑動,當direction等于8時,為向上滑動,當direction等于4時,為向右滑動,當direction等于2時,為向左滑動。

panend事件

滑動結束,一次滑動只會執行一次,同樣在direction中輸出方向,當direction等于16時,為向下滑動,當direction等于8時,為向上滑動,當direction等于4時,為向右滑動,當direction等于2時,為向左滑動。

pancancel事件

滑動取消,不知道何時觸發。

panleft事件

向左滑動,一次滑動多次觸發,其中垂直上下滑動不會觸發,滑動時向左有一定偏移量的時候會觸發。

panright事件

向右滑動,一次滑動多次觸發,其中垂直上下滑動不會觸發,滑動時向右有一定偏移量的時候會觸發。

panup事件

向上滑動,一次滑動多次觸發,其中水平左右滑動不會觸發,滑動時向上有一定偏移量的時候會觸發。

pandown事件

向下滑動,一次滑動多次觸發,其中水平左右滑動不會觸發,滑動時向下有一定偏移量的時候會觸發。

pinch事件

主要支持在當前dom區域內的多個手指(默認兩個手指,多個手指需要單獨設置)的相對移動和相向移動,該事件還可以對以下事件進行處理或者監聽:

pinchstart:多點觸控開始、pinchmove:多點觸控過程、pinchend:多點觸控結束、pinchcancel:多點觸控取消、pinchin:多點觸控時兩手指距離越來越近(縮小)、pinchout:多點觸控時兩手指距離越來越遠(放大),其觸發事件如pan事件。

    var hammertime = new Hammer(document.getElementById("body"));
    hammertime.add(new Hammer.Pinch());
    hammertime.on("pinchin", function (e) {
        swit();
    });

Press事件(長按)

主要支持在當前的dom區域內觸屏版本的點擊事件,這個事件相當于PC端的Click事件,該不能包含任何的移動,最小按壓時間為500毫秒,常用于我們在手機上用的“復制、粘貼”等功能,該事件分別對以下事件進行監聽并處理:

pressup:按壓事件離開時觸發

該事件不存在pressdown事件,具體是否支持按壓開始未知。

rotate事件

主要支持在當前的dom區域內,當兩個手指或更多手指成圓型旋轉時觸發(就像兩個手指擰螺絲一樣)。該事件分別對以下事件進行監聽并處理:

rotatestart:旋轉開始、rotatemove:旋轉過程、rotateend:旋轉結束、rotatecancel:旋轉取消

swipe事件

主要支持在當前的dom區域內,一個手指快速的在觸屏上滑動。即我們平時用到最多的滑動事件。

swipeleft:向左滑動、swiperight:向右滑動、swipeup:向上滑動、swipedown:向下滑動

該事件只有在垂直上下滑動或水平左右滑動時觸發,即滑動時如果傾斜太大角度則不會觸發,觸發條件比較苛刻。

tap事件

主要支持在當前的dom區域內,一個手指輕拍或點擊時觸發該事件(類似PC端的click)。該事件最大點擊時間為250毫秒,如果超過250毫秒則按Press事件進行處理。

注意

默認情況下pinch和rotate事件是被禁止的,可以通過以下代碼開啟它。

hammertime.get('pinch').set({ enable: true });
hammertime.get('rotate').set({ enable: true });

一般情況下,瀏覽器是禁止屏幕上滑下滑事件的,因為瀏覽器默認的是上下滑動滾動頁面,若要允許識別器識別垂直方位或全部方位的 pan 和 swipe,可以這么寫:

hammertime.get('pan').set({ direction: Hammer.DIRECTION_ALL });
hammertime.get('swipe').set({ direction: Hammer.DIRECTION_VERTICAL });

另建議加上如下meta標簽,防止doubletap 或 pinch 縮放了viewport:

<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">

4、hammer滑動事件執行多次處理方法

在滑動事件執行后,我們一般會執行一個函數或者對dom進行操作,hammer事件多次執行,有時候會使函數多次執行或多次dom操作,由于我現在做的項目滑動之后執行的操作是需要一段時間的,所以采用設置一個全局變量作為函數執行開關的方法進行阻止,hammer應該提供了自己的方法,但我還不知道,望知道的小伙伴可以告訴我。

 1 <script type="text/javascript">
 2     var hammerObj=new Hammer(document.getElementById('main'));
 3     var _clock=true;
 4     function foo(){
 5         alert("OK");
 6         _clock=true;
 7     }
 8     hammerObj.on('panmove',function(event){
 9         if(_clock){
10             _clock=false;
11             foo();
12         }
13     });
14 </script>

但是這種方法只有在滑動后執行函數或操作存在一定時間才可以,比如alert()換成console.log()就會多次輸出,沒有辦法解決這個問題。

其實pan事件我們完全不需要使用panmove來實現,可以采用panend,同樣可以輸出不同方向然后進行判斷,但pinchin(捏合)事件同樣會多次執行,所以新的方法還需要尋找。。。

  

    

    

總結

以上是生活随笔為你收集整理的hammer的初始化及移动端各种滑动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。