window.onload = function ()
{
// press the mouse
var oDiv = document.getElementById ('div1');
var disX = 0;
var disY = 0;
oDiv.onmousedown = function (ev)
{
var oEvent = ev || event;
disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop;
// move the mouse
// 2 //
document.onmousemove = function (ev)
//oDiv.onmousemove = function (ev)
// 1 //
//这个函数必须放在 onmousedown里面,不然会不受控制
// 因为这个函数加在 div 上面,所以如果鼠标移出div,那么就会产生问题,所以要把oDiv.onmousemove 改成documet.onmousemove
{
var oEvent = ev || event;
var l = oEvent.clientX - disX;
var t = oEvent.clientY - disY;
// 6 // div 无法从左右上下边拖出
if (l< 0)
{
l = 0;
}
else if (l > document.documentElement.clientWidth - oDiv.offsetWidth)
// 可视区的宽度减去div 的宽度
{
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;
}
oDiv.style.left = l +'px';
oDiv.style.top = t +'px';
}
// leave the mouse
// 4 //
document.onmouseup = function ()
// 3 // 和上面一样的原因 抬起的时候如果不在div内,那么会导致div仍旧移动,比如当鼠标点击着移到文本框头,这时的鼠标已经不在div内了, 这时放在鼠标,再移回屏幕,那么会发现div仍旧会移动
// oDiv.onmouseup = function()
{
document.onmousemove = null;
// oDiv.onmousemove = null; //鼠标抬起之后,之前的拖拽效果就没有了
document.onmouseup = null;
// oDiv.onmouseup = null;
}
return false; // 5 // 这个是防止火狐出现bug,因为这个程序放到ff里,ff或自动生成第二个div,颜色半透明,所以这里要阻止ff产生自己的div, 即 阻止默认行为
}
}