完美的js div拖拽实例代码
本文实例为大家分享了完美的jsdiv拖拽实例代码,供大家参考,具体内容如下
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=GBK"/> <title>拖拽库</title> <styletype="text/css"> div,h2,p{margin:0;padding:0;} body{font:14px/1.5arial;} #box{width:100px;height:100px;background:#fef4eb;padding:5px;margin:50px;border:1pxsolid#f60;} #box.title{height:25px;background:#f60;} #tool{margin-bottom:10px;} </style> <scripttype="text/javascript"> functionDrag() { //初始化 this.initialize.apply(this,arguments) } Drag.prototype={ //初始化 initialize:function(drag,options) { this.drag=this.$(drag); this._x=this._y=0; this._moveDrag=this.bind(this,this.moveDrag); this._stopDrag=this.bind(this,this.stopDrag); this.setOptions(options); this.handle=this.$(this.options.handle); this.maxContainer=this.$(this.options.maxContainer); this.maxTop=Math.max(this.maxContainer.clientHeight,this.maxContainer.scrollHeight)-this.drag.offsetHeight; this.maxLeft=Math.max(this.maxContainer.clientWidth,this.maxContainer.scrollWidth)-this.drag.offsetWidth; this.limit=this.options.limit; this.lockX=this.options.lockX; this.lockY=this.options.lockY; this.lock=this.options.lock; this.onStart=this.options.onStart; this.onMove=this.options.onMove; this.onStop=this.options.onStop; this.handle.style.cursor="move"; this.changeLayout(); this.addHandler(this.handle,"mousedown",this.bind(this,this.startDrag)) }, changeLayout:function() { this.drag.style.top=this.drag.offsetTop+"px"; this.drag.style.left=this.drag.offsetLeft+"px"; this.drag.style.position="absolute"; this.drag.style.margin="0" }, startDrag:function(event) { varevent=event||window.event; this._x=event.clientX-this.drag.offsetLeft; this._y=event.clientY-this.drag.offsetTop; this.addHandler(document,"mousemove",this._moveDrag); this.addHandler(document,"mouseup",this._stopDrag); event.preventDefault&&event.preventDefault(); this.handle.setCapture&&this.handle.setCapture(); this.onStart() }, moveDrag:function(event) { varevent=event||window.event; variTop=event.clientY-this._y; variLeft=event.clientX-this._x; if(this.lock)return; this.limit&&(iTop<0&&(iTop=0),iLeft<0&&(iLeft=0),iTop>this.maxTop&&(iTop=this.maxTop),iLeft>this.maxLeft&&(iLeft=this.maxLeft)); this.lockY||(this.drag.style.top=iTop+"px"); this.lockX||(this.drag.style.left=iLeft+"px"); event.preventDefault&&event.preventDefault(); this.onMove() }, stopDrag:function() { this.removeHandler(document,"mousemove",this._moveDrag); this.removeHandler(document,"mouseup",this._stopDrag); this.handle.releaseCapture&&this.handle.releaseCapture(); this.onStop() }, //参数设置 setOptions:function(options) { this.options= { handle:this.drag,//事件对象 limit:true,//锁定范围 lock:false,//锁定位置 lockX:false,//锁定水平位置 lockY:false,//锁定垂直位置 maxContainer:document.documentElement||document.body,//指定限制容器 onStart:function(){},//开始时回调函数 onMove:function(){},//拖拽时回调函数 onStop:function(){}//停止时回调函数 }; for(varpinoptions)this.options[p]=options[p] }, //获取id $:function(id) { returntypeofid==="string"?document.getElementById(id):id }, //添加绑定事件 addHandler:function(oElement,sEventType,fnHandler) { returnoElement.addEventListener?oElement.addEventListener(sEventType,fnHandler,false):oElement.attachEvent("on"+sEventType,fnHandler) }, //删除绑定事件 removeHandler:function(oElement,sEventType,fnHandler) { returnoElement.removeEventListener?oElement.removeEventListener(sEventType,fnHandler,false):oElement.detachEvent("on"+sEventType,fnHandler) }, //绑定事件到对象 bind:function(object,fnHandler) { returnfunction() { returnfnHandler.apply(object,arguments) } } }; //应用 window.onload=function() { varoBox=document.getElementById("box"); varoTitle=oBox.getElementsByTagName("h2")[0]; varoSpan=document.getElementsByTagName("span")[0]; varoDrag=newDrag(oBox,{handle:oTitle,limit:false}); varaInput=document.getElementsByTagName("input"); //锁定范围接口 aInput[0].onclick=function() { oDrag.limit=!oDrag.limit; this.value=oDrag.limit?"取消锁定范围":"锁定范围" }; //水平锁定接口 aInput[1].onclick=function() { oDrag.lockX=!oDrag.lockX; this.value=oDrag.lockX?"取消水平锁定":"水平锁定" }; //垂直锁定接口 aInput[2].onclick=function() { oDrag.lockY=!oDrag.lockY; this.value=oDrag.lockY?"取消垂直锁定":"垂直锁定" }; //锁定位置接口 aInput[3].onclick=function() { oDrag.lock=!oDrag.lock; this.value=oDrag.lock?"取消锁定位置":"锁定位置" }; //开始拖拽时方法 oDrag.onStart=function() { oSpan.innerHTML="开始拖拽" }; //开始拖拽时方法 oDrag.onMove=function() { oSpan.innerHTML="left:"+this.drag.offsetLeft+",top:"+this.drag.offsetTop }; //开始拖拽时方法 oDrag.onStop=function() { oSpan.innerHTML="结束拖拽" }; }; </script> </head> <body> <divid="tool"> <inputtype="button"value="锁定范围"/> <inputtype="button"value="水平锁定"/> <inputtype="button"value="垂直锁定"/> <inputtype="button"value="锁定位置"/> </div> <p>拖放状态:<span>未开始</span></p> <divid="box"> <h2class="title"></h2> </div> </body> </html> </td> </tr> </table>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。