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

其功能还是比较全的,主要针对触屏的6大事件进行监听:【引用内容转自李林峰的园子】

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>

更多推荐

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