用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
Navymk的公告
文章分类
存档

原创  通用Drag类 收藏

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... ) | 编辑| 举报| 收藏

旧一篇:DateTime类 | 新一篇:[图形框架基础]一个日历...

  • 发表评论
  • 评论内容:
  •  
Copyright © Navymk
Powered by CSDN Blog