拖放效果实例
一、面向过程
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <link rel="stylesheet" href=""> <style type="text/css" media="screen"> <style> * { margin: 0; padding: 0; } #div1 { position: absolute; width: 100px; height: 100px; cursor: move; background-color: red; } </style> </style> </head> <body> <div id="div1"> </div> </body> </html> <script> window.onload = function () { //获取需要拖拽的div var div1 = document.getElementById("div1"); //添加鼠标按下事件 div1.onmousedown = function (evt) { var oEvent = evt || event; //获取按下鼠标到div left top的距离 var distanceX = oEvent.clientX - div1.offsetLeft; var distanceY = oEvent.clientX - div1.offsetTop; //添加doc滑动时间 document.onmousemove = function (evt) { var oEvent = evt || event; //重新计算div的left top值 var left = oEvent.clientX - distanceX; var top = oEvent.clientY - distanceY; //left 当小于等于零时,设置为零 防止div拖出document之外 if (left <= 0) { left = 0; } //当left 超过文档右边界 设置为右边界 else if (left >= document.documentElement.clientWidth - div1.offsetWidth) { left = document.documentElement.clientWidth - div1.offsetWidth; } if (top <= 0) { top = 0; } else if (top >= document.documentElement.clientHeight - div1.offsetHeight) { top = document.documentElement.clientHeight - div1.offsetHeight; } //重新给div赋值 div1.style.top = top + "px"; div1.style.left = left + "px"; } //添加鼠标抬起事件 div1.onmouseup = function () { //清空事件 document.onmousemove = null; div1.onmouseup = null; } } } </script>
二、面向对象
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <link rel="stylesheet" href=""> <style type="text/css"> * { margin:0; padding:0; } #div1 { width: 100px; height: 100px; background-color: red; } #div2 { background-color:yellow; width:100px; height:100px; } </style> </head> <body> <div id="div1"></div> <div id="div2"></div> </body> </html> <script type="text/javascript"> window.onload = function () { new Drag("div1"); new Drag("div2"); } function Drag(id) { this.div = document.getElementById(id); if (this.div) { this.div.style.cursor = "move"; this.div.style.position = "absolute"; } this.disX = 0; this.disY = 0; var _this = this; this.div.onmousedown = function (evt) { _this.getDistance(evt); document.onmousemove = function (evt) { _this.setPosition(evt); } _this.div.onmouseup = function () { _this.clearEvent(); } } } Drag.prototype.getDistance = function (evt) { var oEvent = evt || event; this.disX = oEvent.clientX - this.div.offsetLeft; this.disY = oEvent.clientY - this.div.offsetTop; } Drag.prototype.setPosition = function (evt) { var oEvent = evt || event; var l = oEvent.clientX - this.disX; var t = oEvent.clientY - this.disY; if (l <= 0) { l = 0; } else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) { l = document.documentElement.clientWidth - this.div.offsetWidth; } if (t <= 0) { t = 0; } else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) { t = document.documentElement.clientHeight - this.div.offsetHeight; } this.div.style.left = l + "px"; this.div.style.top = t + "px"; } Drag.prototype.clearEvent = function () { this.div.onmouseup = null; document.onmousemove = null; } </script>