javascript 学习笔记之拖拽篇

联系前面看的浏览器判断和事件,整合一个拖拽的东西出来。。。看代码  

CSS代码:

#div1 {
	background-color:red;
	height:150px;
	width:150px;
	position:absolute;
	z-index:10000;
}
#divDropTarget {
	background-color:blue;
	height:200px;
	width:200px;
	position:absolute;
	left:300px;
}
///
JS代码:
///
<script type="text/javascript">
//检测浏览器类型
function Validate_Browser(str){
 var sUserAgent = navigator.userAgent;
 //先要验证是否是基于KHTML的
 var isKHTML = sUserAgent.indexOf("KHTML") >-1
    || sUserAgent.indexOf("Konqueror") > -1
    || sUserAgent.indexOf("AppleWebKit") > -1;
    
 switch (str.toUpperCase()){
  case "IE":
   return sUserAgent.indexOf("MSIE")>-1 && sUserAgent.indexOf("compatible")>-1;
   break;
   
  case "FIREFOX":
   return sUserAgent.indexOf("Gecko")>-1 && !isKHTML;
   break;
   
  case "NETSCAPE":
   return sUserAgent.indexOf("Mozilla") == 0
     && navigator.appName == "Netscape"
     && !isKHTML;
   break;
   
  case "OPERA":
   return sUserAgent.indexOf("Opera")>-1;
   break;
   
  case "SAFARI":
   return sUserAgent.indexOf("AppleWebKit") > -1 && isKHTML;
   break;
   
  case "KONQUEROR":
   return sUserAgent.indexOf("Konqueror") > -1 && isKHTML;
   break;
   
  default: return false;
 }
};
//检测操作系统
function Validate_System(str){
 var sUserAgent = navigator.userAgent;
 //检测是不是WINDOWS系列的操作系统
  var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
  if(str.toUpperCase() == "WIN")
   return isWin;
   
  if(isWin) {
   switch (str.toUpperCase()){
    case "WIN95":
     return sUserAgent.indexOf("Win95") > -1
     || sUserAgent.indexOf("Windows 95") >-1;
     break;
     
    case "WIN98":
     return sUserAgent.indexOf("Win98") > -1
     || sUserAgent.indexOf("Windows 98") >-1;
     break;
     
    case "WINME":
     return sUserAgent.indexOf("Win 9x 4.90") > -1
     || sUserAgent.indexOf("Windows ME") >-1;
     break;
     
    case "WIN2K":
     return sUserAgent.indexOf("Windows NT 5.0") > -1
     || sUserAgent.indexOf("Windows 2000") >-1;
     break;
     
    case "WINXP":
     return sUserAgent.indexOf("Windows NT 5.1") > -1
     || sUserAgent.indexOf("Windows XP") >-1;
     break;
     
    case "WINNT4":
     return sUserAgent.indexOf("WinNT") > -1
     || sUserAgent.indexOf("Windows NT") >-1
     || sUserAgent.indexOf("WinNT4.0") > -1
     || sUserAgent.indexOf("Windows NT 4.0") > -1
     &&(
     !(sUserAgent.indexOf("Win 9x 4.90") > -1
     || sUserAgent.indexOf("Windows ME") >-1)
     &&
     !(sUserAgent.indexOf("Windows NT 5.0") > -1
     || sUserAgent.indexOf("Windows 2000") >-1)
     &&
     !(sUserAgent.indexOf("Windows NT 5.1") > -1
     || sUserAgent.indexOf("Windows XP") >-1)
     );
     break;
    
    default: return false;
   }
  }
 //检测是不是MAC操作系统
  var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC");
  if(isMac) {
   switch (str.toUpperCase()) {
    case "MAC68K":
     return sUserAgent.indexOf("Mac_68000") > -1
     || sUserAgent.indexOf("68K") > -1;
     break;
     
    case "MACPPC":
     return sUserAgent.indexOf("Mac_PowerPC") > -1
     || sUserAgent.indexOf("PPC") > -1;
     break;
    
    default: return false;
   }
  }
 
 //检测是不是UNIX操作系统
  if(str.toUpperCase() == "UNIX")
   return (navigator.platform == "Xll") && !isWin && !isMac;
};
//定义 EventUtil 对象
var EventUtil = new Object;

//添加事件处理
EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler){
 if(oTarget.addEventListener) {//firefox
  oTarget.addEventListener(sEventType, fnHandler, false);
 } else if(oTarget.attachEvent) {//IE
  oTarget.attachEvent("on"+sEventType, fnHandler);
 } else {//others
  oTarget["on" + sEventType] = fnHandler;
 }
};

//删除事件处理
EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler){
 if(oTarget.removeEventListener) {//firefox
  oTarget.removeEventListener(sEventType, fnHandler, false);
 } else if(oTarget.detachEvent) {//IE
  oTarget.detachEvent("on"+sEventType, fnHandler);
 } else {//others
  oTarget["on" + sEventType] = null;
 }
};

//事件格式化,将IE下的对象尽可能的调整为DOM的事件模型
EventUtil.formatEvent = function(oEvent){
 var isIE = Validate_Browser("ie");
 var isWin= Validate_System("win");
 
 if(isIE && isWin){
  oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keycode : 0;
  oEvent.eventPhase = 2;
  oEvent.isChar = (oEvent.charCode > 0);
  oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
  oEvent.pageY = oEvent.clientY + document.body.scrollTop;
  
  oEvent.preventDefault = function(){
   this.returnValue = false;
  };
  
  if(oEvent.type == "mouseout"){
   oEvent.relatedTarget = oEvent.toElement;
  } else if (oEvent.Type == "mouseover") {
   oEvent.relatedTarget = oEvent.fromElement;
  }
  
  oEvent.stopPropagation = function(){
   this.cancelBubble = true;
  };
  
  oEvent.target = oEvent.srcElement;
  oEvent.time = (new Date()).getTime();
 }
 return oEvent;
};

//获得事件对象
EventUtil.getEvent = function (){
 if(window.event){
  return this.formatEvent(window.event);
 } else {
  return EventUtil.getEvent.caller.arguments[0];
 }
};
//定义变量,为了记录鼠标位置
var iDiffX = 0;
var iDiffY = 0;
//鼠标移动事件
function handleMouseMove() {
 var oEvent = EventUtil.getEvent();
 var oDiv = document.getElementById("div1");
//一定要加单位,奶奶的,不然FIREFOX下无效果
 oDiv.style.left = (oEvent.clientX - iDiffX)+"px";
 oDiv.style.top = (oEvent.clientY - iDiffY)+"px";
}
//鼠标按下事件
function handleMouseDown() {
 var oEvent = EventUtil.getEvent();
 var oDiv = document.getElementById("div1");
 iDiffX = oEvent.clientX - oDiv.offsetLeft;
 iDiffY = oEvent.clientY - oDiv.offsetTop;
 
 EventUtil.addEventHandler(document.body, "mousemove", handleMouseMove);
 EventUtil.addEventHandler(document.body, "mouseup", handleMouseUp);
}
//鼠标抬起时间
function handleMouseUp() {
 var oEvent = EventUtil.getEvent();
 EventUtil.removeEventHandler(document.body, "mousemove", handleMouseMove);
 EventUtil.removeEventHandler(document.body, "mouseup", handleMouseUp);
 if(isOverDropTarget(oEvent.clientX, oEvent.clientY)) {
  alert("dropped!");
  var oDiv = document.getElementById("div1");
  var oTarget = document.getElementById("divDropTarget");
  oDiv.style.left = oTarget.offsetLeft+"px";
  oDiv.style.top = oTarget.offsetTop+"px";
 }
}
//判断是否在层里面
function isOverDropTarget(iX, iY) {
 var oTarget = document.getElementById("divDropTarget");
 var iX1 = oTarget.offsetLeft;
 var iX2 = iX1 + oTarget.offsetWidth;
 var iY1 = oTarget.offsetTop;
 var iY2 = iY1 + oTarget.offsetHeight;
 
 return (iX >= iX1 && iX <= iX2 && iY >= iY1 && iY <= iY2);
}
</script>
 
///
HTML代码:
///
<p><div id="div1" οnmοusedοwn="handleMouseDown(event)"></div></p>
<p><div id="divDropTarget"></div></p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值