web前端 杭州-小白 简单Drag的小例子源码【分享】
最近在学习js中的面向对象。这个是妙味里面的课程视频教程,我就跟着练习 了下。并且把这个例子的源码放上,并加了些自己的一些理解,如果有误请指正。。一个简单的drag拖动的小例子。。。
妙味的视频,真心觉得不错。。。不过还是要看每个人的消化吸收程度了。。。嘎嘎
source:
<script type="text/javascript"> window.onload=function(){ new Drag("test-Drag"); new limitDrag("test-limitDrag"); } function Drag(id){ var _this=this; this.oDiv=document.getElementById(id);//当前对象的id this.disX=0;//初始坐标0 this.disY=0; //执行鼠标按下的动作onmousedown this.oDiv.onmousedown=function(ev){ _this.fnDown(ev); return false; } } Drag.prototype.fnDown=function(ev){ var _this=this; var oEvent=ev||event; //鼠标指针当前的水平坐标值-对象初始的地方的水平坐标值=鼠标水平方向的移动距离 this.disX=oEvent.clientX-this.oDiv.offsetLeft; this.disY=oEvent.clientY-this.oDiv.offsetTop; document.onmousemove=function(ev){ _this.fnMove(ev); }; document.onmouseup=function(){ _this.fnUp(); }; } Drag.prototype.fnMove=function(ev){ var oEvent=ev||event; //鼠标指针当前的水平坐标值-鼠标水平方向移动的距离=对象初始地方那个的水平坐标 var x=oEvent.clientX-this.disX; var y=oEvent.clientY-this.disY; this.oDiv.style.left=x+"px";//这个px必须加。不然没效果 this.oDiv.style.top=y+"px"; } Drag.prototype.fnUp=function(){ //停止移动的时候,都清空 document.onmousemove=null; document.onmouseup=null; } //继承过来的 实现拖动在框口区域内 function limitDrag(id){ //函数伪装 Drag.call(this,id); } //原型继承 避免引用的问题会导致后面的修改影响父级的属性 for(var i in Drag.prototype) { limitDrag.prototype[i]=Drag.prototype[i]; } limitDrag.prototype.fnMove=function(ev) { var oEvent=ev||event; var x=oEvent.clientX-this.disX; var y=oEvent.clientY-this.disY; if(x<0) { x=0; } else if(x>document.documentElement.clientWidth-this.oDiv.offsetWidth) { x=document.documentElement.clientWidth-this.oDiv.offsetWidth; } if(y<0) { y=0; } else if(y>document.documentElement.clientHeight-this.oDiv.offsetHeight) { y=document.documentElement.clientHeight-this.oDiv.offsetHeight; } this.oDiv.style.left=x+"px"; this.oDiv.style.top=y+"px"; } </script>
下面请看demo