<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>百度拖拽</title> <style> *{ padding: 0; margin: 0; } #wrap{ position: absolute; left:0; top:0; width: 300px; height: 400px; background:#0cc; cursor: move; } </style> </head> <body> <div id="wrap"> </div> <script> var wrap = document.getElementById("wrap"); // 水平垂直居中=(屏幕宽(高)度-盒子宽(高)度)/2 wrap.style.left = (document.documentElement.clientWidth - wrap.offsetWidth)/2 + "px"; wrap.style.top = (document.documentElement.clientHeight - wrap.offsetHeight)/2 + "px"; //这里只用到常用的三个鼠标事件:onmousedown(鼠标按下去时触发)、onmousemove(鼠标移动时触发)、onmouseup(鼠标松开时触发) wrap.onmousedown = function(e){//鼠标按下去时 var event = e || window.event;//event是一个事件对象,一个全局对象。e(现代浏览器),window.event(低版本的IE浏览器) var oW =event.clientX - wrap.offsetLeft;//X轴盒子的偏移量 = 当前鼠标点击X轴坐标 - 盒子的left值 var oH = event.clientY - wrap.offsetTop;//Y轴盒子的偏移量 = 当前鼠标点击Y轴坐标 - 盒子的top值 document.onmousemove = function(e){//鼠标移动时 var event = e || window.event; var bLeft = event.clientX - oW;//鼠标移动的left偏移量 = 当前移动的X轴坐标 - X轴盒子的偏移量 var bTop = event.clientY - oH; //鼠标移动的top偏移量 = 当前移动的Y轴坐标 - Y轴盒子的偏移量 var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;//获取文档水平方向滚动条位置 var scrollY = document.documentElement.scrollTop || document.body.scrollTop;//获取文档垂直方向滚动条位置 //scrollX和scrollY为0当出现滚动条时才会大于0 //判断屏幕的边界目的是不让盒子超出屏幕的宽(高)度 if(bLeft < scrollX){ bLeft = scrollX;//盒子的偏移量left=scrollX } else if(bLeft > document.documentElement.clientWidth - wrap.offsetWidth +scrollX){ bLeft = document.documentElement.clientWidth - wrap.offsetWidth +scrollX;//盒子的偏移量left = 屏幕宽度 - 盒子的宽度+scrollx(滚动条值) } if(bTop < scrollY){ bTop = scrollY;//盒子的偏移量top=scrollX } else if(bTop > document.documentElement.clientHeight - wrap.offsetHeight +scrollY){ bTop = document.documentElement.clientHeight - wrap.offsetHeight +scrollY;////盒子的偏移量top = 屏幕高度 - 盒子的高度+scrollY(滚动条值) } wrap.style.left = bLeft + "px";//盒子的left偏移量 wrap.style.top = bTop + "px";//盒子的top偏移量 } } document.onmouseup = function(){ document.onmousemove = null;//鼠标松开时解除onmousemove } </script> </body> </html>