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. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <title>js drag + drop koyoz</title>  
  6. <style type="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.   
  14. <body>  
  15. <div id="drop">拖过来试试</div>  
  16.   
  17. <div id="items">  
  18. <div id="item1" class="item">11111</div>  
  19. <div id="item2" class="item">22222</div>  
  20. <div id="item3" class="item">33333</div>  
  21. <div id="item4" class="item">44444</div>  
  22. <div id="item5" class="item">55555</div>  
  23. <div id="item6" class="item">66666</div>  
  24. </div>  
  25.   
  26.   
  27.   
  28. <script type="text/javascript" src="drag-drop.js"></script>  
  29. <script type="text/javascript">  
  30. //逐个注册drag事件   
  31. var itemx = document.getElementById('items').getElementsByTagName("div")   
  32. for(var i = 0l = itemx.length, i < l; i++)   
  33. {   
  34.     makeDrag(itemx[i]);   
  35. }   
  36. //注册放置对象   
  37. var dropItem = document.getElementById('drop');   
  38. makeDrop(dropItem);   
  39. </script>  
  40. </body>  
  41.   
  42. </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.             return false;   
  47.         }   
  48.     }   
  49. }   
  50.   
  51. function getObjPos(obj)   
  52. {   
  53.     var x = y = 0;   
  54.     if (obj.getBoundingClientRect)   
  55.     {   
  56.         var box = obj.getBoundingClientRect();   
  57.         var D = document.documentElement;   
  58.         x = box.left + Math.max(D.scrollLeft, document.body.scrollLeft) - D.clientLeft;   
  59.         y = box.top + Math.max(D.scrollTop, document.body.scrollTop) - D.clientTop;        
  60.     }   
  61.     else  
  62.     {   
  63.         for(; obj != document.body; x += obj.offsetLeft, y += obj.offsetTop, obj = obj.offsetParent );   
  64.     }   
  65.     return {'x':x, 'y':y};   
  66. }   
  67.   
  68. function getCurPos(e)   
  69. {   
  70.     e = e || window.event;   
  71.     var D = document.documentElement;   
  72.     if (e.pageX) return {x: e.pageX, y: e.pageY};   
  73.     return {   
  74.         x: e.clientX + D.scrollLeft - D.clientLeft,   
  75.         y: e.clientY + D.scrollTop - D.clientTop       
  76.     };   
  77. }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值