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>