var Drag = {
/* --- CSDN.NavyMK --- Drag 2008.6.2*/
_ele : null,
_event : null,
_runTimePosition : [],
_offsetPosition : [],
_objectStorage : {
zIndex : null,
startPositon : [],
cursor : null
},
init : function(obj, e){
Drag._event = e;
Drag._ele = obj;
//存储对象相关信息
Drag._objectStorage.zIndex = Drag._ele.style.zIndex;
Drag._objectStorage.startPositon = Drag._getPosition();
Drag._objectStorage.cursor = Drag._ele.style.cursor;
Drag._offsetPosition = Drag._getOffsetPosition(Drag._event);
Drag._ele.style.zIndex = 10000;
Drag._ele.style.cursor = "move";
Drag._setMouseMoveEvent(true);
Drag._setMouseUpEvent();
Drag._setMouseOutEvent();
},
_getOffsetPosition : function(e){ //获取鼠标相对位置
if(!e) e = window.event;
if(Drag._ele){
if(e.clientX)
return [e.clientX - Drag._objectStorage.startPositon[0], e.clientY - Drag._objectStorage.startPositon[1]];
else
return [e.pageX - Drag._objectStorage.startPositon[0], e.pageX - Drag._objectStorage.startPositon[1]];
}
},
_getPosition : function(){
if(Drag._ele)
return [parseInt(Drag._ele.style.left), parseInt(Drag._ele.style.top)];
},
_setMouseMoveEvent : function(bool){
if(bool){
if(Drag._ele){
Drag._ele.onmousemove = function(e){
if(!e) e = window.event;
setRuntimePos(Drag._ele, e)
}
}
} else {
if(Drag._ele){
Drag._ele.onmousemove = null;
Drag._ele.style.zIndex = Drag._objectStorage.zIndex;
Drag._ele.style.cursor = Drag._objectStorage.cursor;
}
}
return false;
function setRuntimePos(obj, e){
if(e.clientX){
obj.style.left = (e.clientX - Drag._offsetPosition[0]) + "px";
obj.style.top = (e.clientY - Drag._offsetPosition[1]) + "px";
Drag.__cancelBubble(e);
} else {
//obj.style.left = (e.pageX - Drag._offsetPosition[0]) + "px";
//obj.style.top = (e.pageY - Drag._offsetPosition[1]) + "px";
//Drag._setMouseMoveEvent();
return false;
}
}
},
_setMouseUpEvent : function(bool){
if(Drag._ele){
Drag._ele.onmouseup = function(){
Drag._setMouseMoveEvent();
return false;
}
}
},
_setMouseOutEvent : function(bool){
if(Drag._ele){
Drag._ele.onmouseout = function(){
Drag._setMouseMoveEvent();
return false;
}
}
},
__cancelBubble : function(e){
if(e){
try{
e.stopPropagation();
} catch(err) {
e.cancelBubble = true;
}
//if(e.stopPropagation) e.stopPropagation();
//else e.cancelBubble = true;
}
},
__forbidEvent : function(){
if(Drag._event){
if(Drag._event.preventDefault) Drag._event.preventDefault();
else Drag._event.returnValue = false;
}
}
}
fdasfds
__cancelBubble 和 __forbidEvent还比较混乱, event混乱.
在stylesheet中获取数据的能力还不具备.现在困难的是附加样式表文件如何获取还没搞定.遍历?很不好...
目标丢失的情况还可以忍受.下一步慢慢扩展.
发表于 @ 2008年06月05日 20:49:00 | 评论( loading... ) | 举报| 收藏