<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>拖拽</title> </head> <style> #div1{width: 200px;height: 200px;background-color: red;position: absolute; padding:30px;border: 2px solid #000000;} .box{border: 1px dashed black;position: absolute;} </style> <body> <div id="div1"></div> <script> window.onload = function(){ var oDiv = document.getElementById("div1"); var disX=0,disY=0; oDiv.onmousedown = function(ev){ var oEvent = ev||event; disX = oEvent.clientX - oDiv.offsetLeft; disY = oEvent.clientY - oDiv.offsetTop; var oBox = document.createElement("div"); oBox.className = "box"; oBox.style.width = oDiv.offsetWidth-2 + "px";//减去边框 oBox.style.height = oDiv.offsetHeight-2 + "px"; //下面两行防止div移动后再次点击时会自动生成一个在原div位置的虚线框 oBox.style.left = oDiv.offsetLeft + "px"; oBox.style.top = oDiv.offsetTop + "px"; document.body.appendChild(oBox); document.onmousemove = function(ev){ var oEvent = ev||event; var l = oEvent.clientX-disX; var t = oEvent.clientY-disY; //这里可以用来做磁性吸附 if(l<0){l = 0;}else if(l>document.documentElement.clientWidth - oDiv.offsetWidth){ l = document.documentElement.clientWidth - oDiv.offsetWidth; } if(t<0){t = 0;}else if(t>document.documentElement.clientHeight - oDiv.offsetHeight){ t = document.documentElement.clientHeight - oDiv.offsetHeight;} oBox.style.left = l + "px"; oBox.style.top = t + "px"; } document.onmouseup = function(){ document.onmousemove = null; document.onmouseup = null; oDiv.style.left = oBox.offsetLeft+"px"; oDiv.style.top = oBox.offsetTop+"px"; document.body.removeChild(oBox); } return false;//firefox某些版本下会出现鬼影现象,阻止默认事件(浏览器bug) } } </script> </body> </html>