
這是個功能非常簡單的類,只實現了拖拽的功能,當然,代碼也因此保持了原始的簡潔,下面是這個類庫的代碼:
代碼
代碼如下:
/**************************************************
* Drag.js
* 作者:橡樹小屋 07.17.2010
* http://www.cnblogs.com/babyzone2004/
*用法:Drag.initDrag(id); id是標簽的id名稱
**************************************************/
var Drag={
dragObject:null,
mouseOffset:null,
initDrag:function(item){
if(item){
this.item=document.getElementById(item);
this.item.onmousedown=function(evnt){
document.onmousemove=Drag.mouseMove;
document.onmouseup=Drag.mouseUp;
Drag.dragObject=this;
Drag.mouseOffset=Drag.getMouseOffset(this,evnt);
return false;
}
}
},
mousePoint:function(x,y){
this.x=x;
this.y=y;
},
mousePosition:function (evnt){
evnt=evnt||window.event;
var x=parseInt(evnt.clientX);
var y=parseInt(evnt.clientY);
return new Drag.mousePoint(x,y);
},
getMouseOffset:function(target,evnt){
var mousePos=Drag.mousePosition(evnt);
var x=mousePos.x-target.offsetLeft;
var y=mousePos.y-target.offsetTop;
return new Drag.mousePoint(x,y);
},
mouseUp:function (evnt){
Drag.dragObject=null;
document.onmousemove = null;
document.onmouseup = null;
},
mouseMove:function(evnt){
if(!Drag.dragObject) return;
var mousePos=Drag.mousePosition(evnt);
Drag.dragObject.style.position="absolute";
Drag.dragObject.style.top=mousePos.y-Drag.mouseOffset.y+"px";
Drag.dragObject.style.left=mousePos.x-Drag.mouseOffset.x+"px";
return false;
}
}
由于代碼不是很復雜,所以就不詳細展開說了。有需要的可以直接下載使用,導入后用Drag.initDrag(id名稱)方法就可以應用了。
事實上,網上已經有一個輕量級的dom-drag類庫(作者: Aaron Boodman),回頭看到自己寫的類庫,內牛滿面……,dom-drag類可以到http://boring.youngpup.net/projects/dom-drag/下載,代碼非常簡單,而且提供了很多易用的特性。并且網站上提供了非常詳細的例子。
這個類庫就像flash里面的startDrag方法,代碼精簡卻功能實用。你想讓某個組件能夠拖動,你可以調用 Drag.init( ) 方法。
init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
o :是想現實鼠標拖動的組件;
oRoot : 是o上層的組件,將隨o一起拖動;
minX, maxX, minY, maxY :設置鼠標拖動的范圍, 由下面的例子cropper可以看出,如果有oRoot,那范圍是由oRoot相對于頁面來說的;
bSwapHorzRef, bSwapVertRef :設置組件的優先權;
fXMapper, fYMapper: 設置拖動的路徑
其中第三個例子:
示例鏈接:http://boring.youngpup.net/projects/dom-drag/ex3.html
可以實現對拖動范圍的限制,代碼如下:
代碼如下:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com