Hammer.js 实现移动端元素的拖拽库

Hammer.js是一个可以实现移动端元素拖拽的库。

其功能还是比较全的,主要针对触屏的6大事件进行监听:【引用内容转自李林峰的园子】
Hammer.js 实现移动端元素的拖拽库_第1张图片

1、
Pan事件:在指定的dom区域内,一个手指放下并移动事件,即触屏中的拖动事件。这个事件在屏触开发中比较常用,如:左拖动、右拖动等,如手要上使用QQ时向右滑动出现功能菜单的效果。该事件还可以分别对以下事件进行监听并处理:

Panstart:拖动开始、Panmove:拖动过程、Panend:拖动结束、Pancancel:拖动取消、Panleft:向左拖动、Panright:向右拖动、Panup:向上拖动、Pandown:向下拖动

2、
Pinch事件:在指定的dom区域内,两个手指(默认为两个手指,多指触控需要单独设置)或多个手指相对(越来越近)移动或相向(越来越远)移动时事件。该事件事以分别对以下事件进行监听并处理:

Pinchstart:多点触控开始、Pinchmove:多点触控过程、Pinchend:多点触控结束、Pinchcancel:多点触控取消、Pinchin:多点触控时两手指距离越来越近、Pinchout:多点触控时两手指距离越来越远

3、
Press事件:在指定的dom区域内触屏版本的点击事件,这个事件相当于PC端的Click事件,该不能包含任何的移动,最小按压时间为500毫秒,常用于我们在手机上用的“复制、粘贴”等功能。该事件分别对以下事件进行监听并处理:

Pressup:点击事件离开时触发

4、
Rotate事件:在指定的dom区域内,当两个手指或更多手指成圆型旋转时触发(就像两个手指拧螺丝一样)。该事件分别对以下事件进行监听并处理:

Rotatestart:旋转开始、Rotatemove:旋转过程、Rotateend:旋转结束、Rotatecancel:旋转取消

5、 Swipe事件:在指定的dom区域内,一个手指快速的在触屏上滑动。即我们平时用到最多的滑动事件。

Swipeleft:向左滑动、Swiperight:向右滑动、Swipeup:向上滑动、Swipedown:向下滑动

6、Tap事件:在指定的dom区域内,一个手指轻拍或点击时触发该事件(类似PC端的click)。该事件最大点击时间为250毫秒,如果超过250毫秒则按Press事件进行处理。

以下,是我的例子,因为我只需要使用拖拽,所以只需要监听pan就可以了。
开始的时候我没用对,原因是我没好好看API :http://hammerjs.github.io/getting-started/,就想着只要调用一个hammer实例就能实现拖拽。但是其实,你还是需要自己写拖拽的逻辑,逻辑与PC端鼠标点击实现拖拽类似。需要分别监听 panstart panmove panend ,其实就是对应着 mousedown mouseover mouseup。我将代码封装成了一个drag函数,这样想拖拽哪个元素只要调用drag函数就可以了。

<!DOCTYPE html>
<html>
<head>
    <title>Hammer类库实现拖拽</title>
    <meta charset="utf-8" />
    <script type="text/javascript" src="js/screen_adapt.js"></script>
    <style type="text/css"> body{ width: 640px; } #source{ width: 600px; height: 300px; margin: 0 auto; border: 1px solid red; } #destinition{ width: 600px; height: 300px; margin: 0 auto; border: 1px solid black; } #move-box{ background-color: black; width: 80px; height: 80px; position: absolute; top: 0px; left: 0px; } </style>
</head>
<body>
    <div id="source">
        <div id="move-box"></div>
    </div>
    <div id="destinition"></div>
<script type="text/javascript" src="js/jquery-2.2.0.js"></script>
<script type="text/javascript" src="js/hammer.min.js"></script>

<script type="text/javascript"> //获取相关CSS属性 var getCss = function(o,key){ return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,false)[key]; }; function drag(element){ element.style.top = getCss(element,"top"); element.style.left = getCss(element,"left"); var hammer = new Hammer(element);//hammer实例 var x = 0; var y = 0; hammer.on('panstart',function(event){ x = parseInt(element.style.left); y = parseInt(element.style.top); }); hammer.on('panmove',function(event){ element.style.top = y + event.deltaY + "px"; element.style.left = x + event.deltaX + "px"; }); hammer.on('panend',function(event){ }); } var myElement = document.getElementById("move-box"); drag(myElement); </script>
</body>
</html>

你可能感兴趣的:(移动端,拖拽,js库,hammer.js)