jquery用法:
引入3个JS:
<script src="jquery.js"></script> <script src="hammer.js"></script> <script src="jquery.hammer.js"></script>
$(".myElement").hammer().bind("tap", function(ev) { $(this).addClass("red"); console.log(ev); }).bind("press", function(ev) { $(this).removeClass("red"); console.log("press"); });
//下面写在一起
拖动:
<div id="myElement" style="position:fixed;"> </div> 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){ console.log("panstart"); x = parseInt(element.style.left); y = parseInt(element.style.top); }); hammer.on('panmove',function(event){ console.log("panmove"); element.style.top = y + event.deltaY + "px"; element.style.left = x + event.deltaX + "px"; }); hammer.on('panend',function(event){ console.log("panend"); }); } var myElement = document.getElementById("move-box"); drag(myElement);
一般用法:
<script src="hammer.js"></script> var myElement = document.getElementById('myElement'); var mc = new Hammer(myElement); mc.get('pan').set({ direction: Hammer.DIRECTION_ALL }); mc.on("panleft panright panup pandown tap press", function(ev) { if(ev.type == "press"){ obj.addClass("red") }else { obj.removeClass("red"); } });
官网:
在线调试:
http://codepen.io/jtangelder/pen/lgELw
网上:
http://www.tuicool.com/articles/VNRjym7
http://blog.csdn.net/kongjiea/article/details/43016085
----------------- 原生JS:
JS拖拽移动位置(手机端)
<div id="div" style="100px;height:100px;background-color:red;position:absolute;"></div> <script> var div = document.getElementById('div'); div.addEventListener('touchmove', function(event) { event.preventDefault();//阻止其他事件 // 如果这个元素的位置内只有一个手指的话 if (event.targetTouches.length == 1) { var touch = event.targetTouches[0]; // 把元素放在手指所在的位置 div.style.left = touch.pageX + 'px'; div.style.top = touch.pageY + 'px'; div.style.background = "green"; } }, false); </script>
JQUERY手机长按触发事件(手机端)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" Content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0">
<title>fdsa</title>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
</head>
<body>
<div id="div" style="100px;height:100px;background:#ddd;position:absolute;"></div>
<script>
//长按事件
$.fn.longPress = function (fn) {
var timeout = undefined;
var $this = this;
for (var i = 0; i < $this.length; i++) {
$this[i].addEventListener('touchstart', function (event) {
timeout = setTimeout(fn, 500);
}, false);
$this[i].addEventListener('touchend', function (event) {
clearTimeout(timeout);
}, false);
}
};
//阻止浏览器 复制粘贴等事件
window.ontouchstart = function (e) { e.preventDefault(); };
//触发事件
$("#div").longPress(function () {
console.log("long");
alert("Ok");
});
</script>
</body>
</html>
JQUERY手机长按并移动触发事件(手机端)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" Content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0">
<title>长按并移动</title>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<style>
.mydiv{
position:absolute;
left:10px;
top:10px;
background-color:gray;
100px;
height:80px;
z-index:10;
display:block;
}
</style>
</head>
<body>
<div class="mydiv">out</div>
<div class="mydiv" style="top:200px;">out</div>
<script>
$.fn.longPress = function (fn) {
/*设置一个长按的计时器,如果点击这个图层超过2秒则触发,mydiv里面的文字从out变in的动作*/
var timeout = undefined;
var state = 0;
var $this = this;
for (var i = 0; i < $this.length; i++) {
$this[i].addEventListener('touchstart', function (event) {
clearTimeout(timeout);
state = 0;
timeout = setTimeout(function () {
state = 1;
}, 1000);
}, false);
$this[i].addEventListener('touchmove', function (event) {
if (state == 1) {
console.log("move");
}
}, false);
$this[i].addEventListener('touchend', function (event) {
clearTimeout(timeout);
if (state == 1) {
console.log("end");
state = 0;
}
}, false);
}
};
//阻止浏览器 复制粘贴等事件
window.ontouchstart = function (e) {
e.preventDefault();
};
//触发事件
$(".mydiv").longPress(function () {
console.log("long");
});
</script>
</body>
</html>
JS拖拽交换位置(电脑端)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>孚盟CRM</title>
<meta name="viewport" Content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0">
<title></title>
<style type="text/css">
*{ margin: 0; padding: 0; -moz-user-select:none;}
ul{ margin: 100px; border: 1px solid #adff2f; list-style: none;}
li{ height: 30px; line-height: 30px; padding: 0; list-style: none;}
li:hover{ background: #bdb76b; cursor: move;}
</style>
</head>
<body>
<ul id="outer_wrap">
<li>第一条</li>
<li>第二条</li>
<li>第三条</li>
<li>第四条</li>
<li>第五条</li>
<li>第六条</li>
<li>第七条</li>
<li>第八条</li>
</ul>
<script type="text/javascript">
function $(id){
return document.getElementById(id);
}
//获取鼠标位置
function getMousePos(e){
return {
x : e.pageX || e.clientX + document.body.scrollLeft,
y : e.pageY || e.clientY + document.body.scrollTop
}
}
//获取元素位置
function getElementPos(el){
return {
x : el.offsetParent ? el.offsetLeft + arguments.callee(el.offsetParent)['x'] : el.offsetLeft,
y : el.offsetParent ? el.offsetTop + arguments.callee(el.offsetParent)['y'] : el.offsetTop
}
}
//获取元素尺寸
function getElementSize(el){
return {
width : el.offsetWidth,
height : el.offsetHeight
}
}
//禁止选择
document.onselectstart = function(){
return false;
}
//判断是否有挪动
var MOVE = {};
MOVE.isMove = false;
//就是创建的标杆
var div = document.createElement('div');
div.style.width = '400px';
div.style.height = '1px';
div.style.fontSize = '0';
div.style.background = 'red';
var outer_wrap = $('outer_wrap');
outer_wrap.onmousedown = function(event){
//获取列表顺序
var lis = outer_wrap.getElementsByTagName('li');
for(var i = 0; i < lis.length; i++){
lis[i]['pos'] = getElementPos(lis[i]);
lis[i]['size'] = getElementSize(lis[i]);
}
event = event || window.event;
var t = event.target || event.srcElement;
if(t.tagName.toLowerCase() == 'li'){
var p = getMousePos(event);
var el = t.cloneNode(true);
el.style.position = 'absolute';
el.style.left = t.pos.x + 'px';
el.style.top = t.pos.y + 'px';
el.style.width = t.size.width + 'px';
el.style.height = t.size.height + 'px';
el.style.border = '1px solid #d4d4d4';
el.style.background = '#d4d4d4';
el.style.opacity = '0.7';
document.body.appendChild(el);
document.onmousemove = function(event){
event = event || window.event;
var current = getMousePos(event);
el.style.left =t.pos.x + current.x - p.x + 'px';
el.style.top =t.pos.y + current.y - p.y+ 'px';
document.body.style.cursor = 'move';
//判断插入点
for(var i = 0; i < lis.length; i++){
if(current.x > lis[i]['pos']['x'] && current.x < lis[i]['pos']['x'] + lis[i]['size']['width'] && current.y > lis[i]['pos']['y'] && current.y < lis[i]['pos']['y'] + lis[i]['size']['height']/2){
if(t != lis[i]){
MOVE.isMove = true;
outer_wrap.insertBefore(div,lis[i]);
}
}else if(current.x > lis[i]['pos']['x'] && current.x < lis[i]['pos']['x'] + lis[i]['size']['width'] && current.y > lis[i]['pos']['y'] + lis[i]['size']['height']/2 && current.y < lis[i]['pos']['y'] + lis[i]['size']['height']){
if(t != lis[i]){
MOVE.isMove = true;
outer_wrap.insertBefore(div,lis[i].nextSibling);
}
}
}
}
//移除事件
document.onmouseup = function(event){
event = event || window.event;
document.onmousemove = null;
if(MOVE.isMove){
outer_wrap.replaceChild(t,div);
MOVE.isMove = false;
}
document.body.removeChild(el);
el = null;
document.body.style.cursor = 'normal';
document.onmouseup = null;
}
}
}
</script>
</body>
</html>
jQuery 拖拽交换位置(电脑端)
<!doctype html>
<html>
<head>
<meta charset='utf-8' />
<meta name="viewport"
content="
width = device-width ,
height = device-height ,
initial-scale = 1,
minimum-scale = 1,
maximum-scale = 1,
user-scalable =no,
"
/>
<title></title>
<style>
* { padding:0;margin:0;list-style: none }
html,body { height:100%; overflow:hidden; }
ul { margin:50px auto;position:relative; 1100px; height:500px;}
ul li { float:left; 25%; cursor:pointer; padding:10px; box-sizing:border-box; height:33%}
ul img { height:100%;100%; box-shadow:0 3px 4px rgba(102,102,102,0.5) }
</style>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
</head>
<body>
<script>
$(function(){
var ps={L:[],R:[],T:[],B:[]};
for(var i=11; i>=0; i--){
var oLi = $('li').eq(i),
gLi = oLi.get(0);
oLi.css({'left':gLi.offsetLeft+'px','top':gLi.offsetTop+'px','position':'absolute','margin':0});
ps.L.push(gLi.offsetLeft);
ps.T.push(gLi.offsetTop);
ps.R.push(gLi.offsetLeft + gLi.offsetWidth);
ps.B.push(gLi.offsetTop + gLi.offsetHeight);
};
ps.L = ps.L.reverse();
ps.R = ps.R.reverse();
ps.T = ps.T.reverse();
ps.B = ps.B.reverse(); //储存位置
//初始化
var b = 0;
$(document).on('mousedown','li',function(e){
e.preventDefault();
var _this = this;
if(_this.setCapture){_this.setCapture()};
var X = e.clientX - _this.offsetLeft,
Y = e.clientY - _this.offsetTop,
oList = $('li'),
attr = [];
my_index = $( _this ).attr('index'); //初始保存一个原来的Index,回到原来的数组(位置)
$(_this).css({'opacity':0.9,'zIndex':1});
document.index = my_index; //目的是为了脱离变量作用域
$('li').each(function() {
attr.push( $(this).attr('index') )
});
$(document).on('mousemove',function(e){
var lt = e.clientX - X,
tp = e.clientY - Y,
screen_l = e.clientX - _this.parentNode.offsetLeft,
screen_t = e.clientY - _this.parentNode.offsetTop;
$(_this).css({'left':lt+'px','top':tp+'px'});
for(var i=0;i<12;i++){
var he_index = parseInt(oList.eq(i).attr('index'));
if(screen_l>ps.L[he_index]&&screen_l<ps.R[he_index]&&screen_t>ps.T[he_index]&&screen_t<ps.B[he_index]){
var i_index = parseInt($(_this).attr('index'));
if(he_index == i_index)continue;
document.index = he_index; //当找到元素保存要抵达的位置的index
document.flag = false;
var test = function (num,j){
var he_Li = $('li[index='+j+']');
$(he_Li).stop();
he_Li.animate({
left:ps.L[j+num],
top:ps.T[j+num]
},'fast');
he_Li.attr('index',j+num);
};
//利用属性选择器找到对应index(也就是找到数组相应位置)的元素;并且变换属性index到相应的数组索引;
if(i_index>he_index){
for(var j=i_index-1; j>=he_index; j--){
test(1,j);
}
}else{
for(var j=i_index+1; j<he_index+1; j++){
test(-1,j);
}
};
$(_this).attr('index',he_index); //变换_this的index
document.flag = true;
}else{
if(document.flag){
var parent = _this.parentNode,
parent_X = e.clientX - parent.offsetLeft,
parent_Y = e.clientY - parent.offsetTop;
if( parent_X<0||parent_X>parent.offsetWidth||parent_Y<0||parent_Y>parent.offsetHeight ){
oList.not(_this).each(function(index, element) {
var a = $(element).index();
$(element).animate({
left:ps.L[attr[a]],
top:ps.T[attr[a]]
},'fast').attr('index',attr[a])
});
document.index = my_index;
$(_this).attr('index',my_index);
document.flag = false;
//当移出父节点还原
}
}
};
};
});
$(document).on('mouseup',function(){
if(_this.releaseCapture){
_this.releaseCapture();
};
$(this).off('mousemove');
$(this).off('mouseup');
$(_this).animate({
left:ps.L[document.index],
top:ps.T[document.index]
},'fast',function(){
$(_this).css({'opacity':1,'zIndex':0})
});
delete document.index;
delete document.flag;
});
});
})
</script>
<ul>
<li index="0"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="1"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="2"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="3"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="4"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="5"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="6"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="7"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="8"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="9"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="10"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
<li index="11"><img src="http://www.baidu.com/img/bd_logo1.png" title="百度" /></li>
</ul>
</body>
</html>
拖放移动位置如:(移动端拖拽的实现效果)
http://blog.csdn.net/xyphf/article/details/51988947
移动端 javascript 实现长按拖动
https://segmentfault.com/q/1010000008667545
。