HTML DIV 层拖动简单实现
来源:互联网 发布:淘宝卖家提前收款 编辑:程序博客网 时间:2024/05/22 10:59
<HTML> <HEAD> <title>WebForm8</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script language=javascript> var iNodeX; var iNodeY; var oNode; var isDown = false; var iBodyWidth = 0; var iBodyHeight = 0; var iMaxTop = 0; var iMaxLeft = 0; var iMinTop = 0; var iMinLeft = 0; window.onload = function() { iBodyWidth = document.body.clientWidth; iBodyHeight = document.body.clientHeight; iMaxLeft = iBodyWidth-100; iMaxTop = iBodyHeight-100; } //开始拖动 //1:在截取层上按下鼠标后设置拖动开始时初始值 function InitDrag() { oNode=document.getElementById("div"); oNode.setCapture(); //获取当前对象的鼠标捕捉 iNodeZ=oNode.style.zIndex; oNode.style.zIndex=100; //确保当前层显示在最前面 iNodeX=parseInt(event.offsetX); iNodeY=parseInt(event.offsetY); isDown=true; } //拖动 //1:限制拖动必须在底图范围内 function OnDrag() { if(isDown) { ChangePosition(); LimitOnTarget(); } } //结束拖动 //释放当前对象的鼠标捕捉 function StopDrag() { isDown=false //鼠标松开 oNode.style.zIndex=iNodeZ //还原对象的Z轴坐标值 oNode.releaseCapture() //释放当前对象的鼠标捕捉 } //改变截取区域的位置 function ChangePosition() { with(oNode.style) { posLeft=document.body.scrollLeft+event.x-iNodeX; //设置对象的X坐标值为文档在X轴方向上的滚动距离加上当前鼠标指针相当于文档对象的X坐标值减鼠标按下时指针位置相对于触发事件的对象的X坐标 posTop=document.body.scrollTop+event.y-iNodeY; //设置对象的Y坐标值为文档在Y轴方向上的滚动距离加上当前鼠标指针相当于文档对象的Y坐标值减鼠标按下时指针位置相对于触发事件的对象的Y坐标 } } //限制在目标对象内拖动 //如果超出了边缘将目标对象的最大/最小值赋给截取层 function LimitOnTarget() { var iX = parseInt(oNode.style.left); //对象x坐标 var iY = parseInt(oNode.style.top); //对象y坐标 var iWidth = parseInt(oNode.style.width); //对象宽度 var iHeight = parseInt(oNode.style.height); //对象长度 var iTagX = 0 //目标对象x坐标 var iTagY = 0 //目标对象y坐标 var iTagWidth = iBodyWidth; //目标对象宽度 var iTagHeight = iBodyHeight; //目标对象长度 if(iX<iTagX) { oNode.style.left = iTagX; } if(iY<iTagY) { oNode.style.top = iTagY; } if(iX+iWidth>iTagX+iTagWidth) { oNode.style.left = iMaxLeft; } if(iY+iHeight>iTagY+iTagHeight) { oNode.style.top = iMaxTop; } } </script> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <div id="div" onmousedown='InitDrag()' onmousemove='OnDrag();' onmouseup='StopDrag()' style="position: absolute;border-top:1px solid BLUE;border-bottom:1px solid BLUE;border-right:1px solid BLUE;border-left:1px solid BLUE; background-color:red; filter: Alpha(opacity=30);width:100;height:100"></div> </form> </body></HTML>