1. 程式人生 > >js拖拽和放置 javascript drag and drop

js拖拽和放置 javascript drag and drop

js拖拽和放置效果.

這個drag-drop.html

XML/HTML程式碼
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html; charset=gb2312"/>
  5. <title>js drag + drop koyoz
    </title>
  6. <styletype="text/css">
  7. * {margin:0px;padding:0px;font-size:12px;}   
  8. #drop{position:absolute;width:200px;height:300px;border:1px #A5B6C8 solid;background:#EEF3F7;left:400px;top:100px;padding:10px;}   
  9. .item {width:100px; height:28px;background:#C2ECA7;text-align:center;line-height:28px;cursor:pointer;margin-top:5px;}   
  10. #items {margin: 50px 0 0 100px;}   
  11. </style>
  12. </head>
  13. <body>
  14. <divid="drop">拖過來試試</div>
  15. <divid="items">
  16. <divid="item1"class="item">11111</div>
  17. <divid="item2"class="item">22222</div>
  18. <divid="item3"class="item">33333</div>
  19. <divid="item4"class
    ="item">44444</div>
  20. <divid="item5"class="item">55555</div>
  21. <divid="item6"class="item">66666</div>
  22. </div>
  23. <scripttype="text/javascript"src="drag-drop.js"></script>
  24. <scripttype="text/javascript">
  25. //逐個註冊drag事件   
  26. var itemx = document.getElementById('items').getElementsByTagName("div")   
  27. for(var i = 0l = itemx.length, i <l; i++)   
  28. {   
  29.     makeDrag(itemx[i]);   
  30. }   
  31. //註冊放置物件   
  32. var dropItem = document.getElementById('drop');   
  33. makeDrop(dropItem);   
  34. </script>
  35. </body>
  36. </html>

這是drag-drop.js 

JavaScript程式碼
  1. var makeDrag_flag = false;   
  2. var makeDrop_objs = [];   
  3. //註冊放置物件
  4. function makeDrop(obj)   
  5. {   
  6.     makeDrop_objs.push(obj);       
  7. }   
  8. //註冊拖動物件
  9. function makeDrag(obj)   
  10. {   
  11.     obj.onmousedown = function (e)   
  12.     {   
  13. if (!document.all) e.preventDefault();   
  14. var oPos = getObjPos(obj);   
  15. var cPos = getCurPos(e);   
  16.         makeDrag_flag = true;   
  17.         document.onmouseup = function (e){   
  18.             makeDrag_flag = false;   
  19.             document.onmousemove = null;   
  20.             document.onmouseup = null;             
  21. //放置位置檢查開始
  22. var nPos = getCurPos(e);               
  23. for(i = 0; i < makeDrop_objs.length; i++)   
  24.             {   
  25. var tg = makeDrop_objs[i];   
  26. var tPos = getObjPos(tg);   
  27. var tg_w = tg.offsetWidth;   
  28. var tg_h = tg.offsetHeight;   
  29. if ((nPos.x > tPos.x) && (nPos.y > tPos.y) && (nPos.x < tPos.x + tg_w) && (nPos.y < tPos.y + tg_h))   
  30.                 {   
  31.                     tg.innerHTML += '<p>' + obj.innerHTML + '拖入</p>'
  32.                     obj.style.display = 'none';   
  33.                 }   
  34.             }   
  35. //放置位置檢查結束
  36.         };   
  37.         document.onmousemove = function (e)   
  38.         {   
  39. if (makeDrag_flag)   
  40.             {   
  41.                 obj.style.position = 'absolute';   
  42. var Pos = getCurPos(e);   
  43.                 obj.style.left = Pos.x - cPos.x + oPos.x + 'px';   
  44.                 obj.style.top = Pos.y - cPos.y + oPos.y + 'px';   
  45.             }   
  46. returnfalse;   
  47.         }   
  48.     }   
  49. }   
  50. function getObjPos(obj)   
  51. {   
  52. var x = y = 0;   
  53. if (obj.getBoundingClientRect)   
  54.     {   
  55. var box = obj.getBoundingClientRect();   
  56. var D = document.documentElement;   
  57.         x = box.left + Math.max(D.scrollLeft, document.body.scrollLeft) - D.clientLeft;   
  58.         y = box.top + Math.max(D.scrollTop, document.body.scrollTop) - D.clientTop;        
  59.     }   
  60. else
  61.     {   
  62. for(; obj != document.body; x += obj.offsetLeft, y += obj.offsetTop, obj = obj.offsetParent );   
  63.     }   
  64. return {'x':x, 'y':y};   
  65. }   
  66. function getCurPos(e)   
  67. {   
  68.     e = e || window.event;   
  69. var D = document.documentElement;   
  70. if (e.pageX) return {x: e.pageX, y: e.pageY};   
  71. return {   
  72.         x: e.clientX + D.scrollLeft - D.clientLeft,   
  73.         y: e.clientY + D.scrollTop - D.clientTop       
  74.     };   
  75. }