- js拖动div实现调换位置
- 点击次数 | 更新时间 | 2016-03-10 20:46:10
-
[摘要]
&... 1.JQ实现拖动div
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>jQuery UI Sortable - Default functionality</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> <script src="//code.jquery.com/jquery-1.10.2.js"></script> <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> <link rel="stylesheet" href="/resources/demos/style.css"> <style> #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; } #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; } #sortable li span { position: absolute; margin-left: -1.3em; } </style> <script> $(function() { $( "#sortable" ).sortable(); $( "#sortable" ).disableSelection(); }); </script> </head> <body> <ul id="sortable"> <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li> <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li> <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li> <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li> <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li> <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li> <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li> </ul> </body> </html>
效果显示:
原文地址:http://jqueryui.com/sortable/2.纯JS实现拖动div
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <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>
- 上一篇:11个好用的jQuery拖拽拖放插件
- 下一篇:textarea 输入框限制字数