`
hackbomb
  • 浏览: 215194 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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;   

#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代码: 
JS代码:
 
/////////////////////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////////////////////
 
<script type="text/javascript"><BR>//检测浏览器类型<BR>function Validate_Browser(str){<BR> var sUserAgent = navigator.userAgent;<BR> //先要验证是否是基于KHTML的<BR> var isKHTML = sUserAgent.indexOf("KHTML") >-1<BR>    || sUserAgent.indexOf("Konqueror") > -1<BR>    || sUserAgent.indexOf("AppleWebKit") > -1;<BR>    <BR> switch (str.toUpperCase()){<BR>  case "IE":<BR>   return sUserAgent.indexOf("MSIE")>-1 && sUserAgent.indexOf("compatible")>-1;<BR>   break;<BR>   <BR>  case "FIREFOX":<BR>   return sUserAgent.indexOf("Gecko")>-1 && !isKHTML;<BR>   break;<BR>   <BR>  case "NETSCAPE":<BR>   return sUserAgent.indexOf("Mozilla") == 0 <BR>     && navigator.appName == "Netscape"<BR>     && !isKHTML;<BR>   break;<BR>   <BR>  case "OPERA":<BR>   return sUserAgent.indexOf("Opera")>-1;<BR>   break;<BR>   <BR>  case "SAFARI":<BR>   return sUserAgent.indexOf("AppleWebKit") > -1 && isKHTML;<BR>   break;<BR>   <BR>  case "KONQUEROR":<BR>   return sUserAgent.indexOf("Konqueror") > -1 && isKHTML;<BR>   break;<BR>   <BR>  default: return false;<BR> }<BR>}; 
<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; }};
 
//检测操作系统<BR>function Validate_System(str){<BR> var sUserAgent = navigator.userAgent;<BR> //检测是不是WINDOWS系列的操作系统<BR>  var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");<BR>  if(str.toUpperCase() == "WIN")<BR>   return isWin;<BR>   <BR>  if(isWin) {<BR>   switch (str.toUpperCase()){<BR>    case "WIN95":<BR>     return sUserAgent.indexOf("Win95") > -1<BR>     || sUserAgent.indexOf("Windows 95") >-1;<BR>     break;<BR>     <BR>    case "WIN98":<BR>     return sUserAgent.indexOf("Win98") > -1<BR>     || sUserAgent.indexOf("Windows 98") >-1;<BR>     break;<BR>     <BR>    case "WINME":<BR>     return sUserAgent.indexOf("Win 9x 4.90") > -1<BR>     || sUserAgent.indexOf("Windows ME") >-1;<BR>     break;<BR>     <BR>    case "WIN2K":<BR>     return sUserAgent.indexOf("Windows NT 5.0") > -1<BR>     || sUserAgent.indexOf("Windows 2000") >-1;<BR>     break;<BR>     <BR>    case "WINXP":<BR>     return sUserAgent.indexOf("Windows NT 5.1") > -1<BR>     || sUserAgent.indexOf("Windows XP") >-1;<BR>     break;<BR>     <BR>    case "WINNT4":<BR>     return sUserAgent.indexOf("WinNT") > -1<BR>     || sUserAgent.indexOf("Windows NT") >-1<BR>     || sUserAgent.indexOf("WinNT4.0") > -1<BR>     || sUserAgent.indexOf("Windows NT 4.0") > -1<BR>     &&(<BR>     !(sUserAgent.indexOf("Win 9x 4.90") > -1<BR>     || sUserAgent.indexOf("Windows ME") >-1)<BR>     &&<BR>     !(sUserAgent.indexOf("Windows NT 5.0") > -1<BR>     || sUserAgent.indexOf("Windows 2000") >-1)<BR>     &&<BR>     !(sUserAgent.indexOf("Windows NT 5.1") > -1<BR>     || sUserAgent.indexOf("Windows XP") >-1)<BR>     );<BR>     break;<BR>    <BR>    default: return false;<BR>   }<BR>  }<BR> //检测是不是MAC操作系统<BR>  var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC");<BR>  if(isMac) {<BR>   switch (str.toUpperCase()) {<BR>    case "MAC68K":<BR>     return sUserAgent.indexOf("Mac_68000") > -1<BR>     || sUserAgent.indexOf("68K") > -1;<BR>     break;<BR>     <BR>    case "MACPPC":<BR>     return sUserAgent.indexOf("Mac_PowerPC") > -1<BR>     || sUserAgent.indexOf("PPC") > -1;<BR>     break;<BR>    <BR>    default: return false;<BR>   }<BR>  }<BR> <BR> //检测是不是UNIX操作系统<BR>  if(str.toUpperCase() == "UNIX")<BR>   return (navigator.platform == "Xll") && !isWin && !isMac;<BR>};<BR>//定义 EventUtil 对象<BR>var EventUtil = new Object; 
//检测操作系统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;
 
<BR>//添加事件处理<BR>EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler){<BR> if(oTarget.addEventListener) {//firefox<BR>  oTarget.addEventListener(sEventType, fnHandler, false);<BR> } else if(oTarget.attachEvent) {//IE<BR>  oTarget.attachEvent("on"+sEventType, fnHandler);<BR> } else {//others<BR>  oTarget["on" + sEventType] = fnHandler;<BR> }<BR>}; 
//添加事件处理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; }};
 
<BR>//删除事件处理<BR>EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler){<BR> if(oTarget.removeEventListener) {//firefox<BR>  oTarget.removeEventListener(sEventType, fnHandler, false);<BR> } else if(oTarget.detachEvent) {//IE<BR>  oTarget.detachEvent("on"+sEventType, fnHandler);<BR> } else {//others<BR>  oTarget["on" + sEventType] = null;<BR> }<BR>}; 
//删除事件处理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; }};
 
<BR>//事件格式化,将IE下的对象尽可能的调整为DOM的事件模型<BR>EventUtil.formatEvent = function(oEvent){<BR> var isIE = Validate_Browser("ie");<BR> var isWin= Validate_System("win");<BR> <BR> if(isIE && isWin){<BR>  oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keycode : 0;<BR>  oEvent.eventPhase = 2;<BR>  oEvent.isChar = (oEvent.charCode > 0);<BR>  oEvent.pageX = oEvent.clientX + document.body.scrollLeft;<BR>  oEvent.pageY = oEvent.clientY + document.body.scrollTop;<BR>  <BR>  oEvent.preventDefault = function(){<BR>   this.returnValue = false;<BR>  };<BR>  <BR>  if(oEvent.type == "mouseout"){<BR>   oEvent.relatedTarget = oEvent.toElement;<BR>  } else if (oEvent.Type == "mouseover") {<BR>   oEvent.relatedTarget = oEvent.fromElement;<BR>  }<BR>  <BR>  oEvent.stopPropagation = function(){<BR>   this.cancelBubble = true;<BR>  };<BR>  <BR>  oEvent.target = oEvent.srcElement;<BR>  oEvent.time = (new Date()).getTime();<BR> }<BR> return oEvent;<BR>}; 
//事件格式化,将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;};
 
<BR>//获得事件对象<BR>EventUtil.getEvent = function (){<BR> if(window.event){<BR>  return this.formatEvent(window.event);<BR> } else {<BR>  return EventUtil.getEvent.caller.arguments[0];<BR> }<BR>};<BR>//定义变量,为了记录鼠标位置<BR>var iDiffX = 0;<BR>var iDiffY = 0; 
//获得事件对象EventUtil.getEvent = function (){ if(window.event){  return this.formatEvent(window.event); } else {  return EventUtil.getEvent.caller.arguments[0]; }};//定义变量,为了记录鼠标位置var iDiffX = 0;var iDiffY = 0;
 
//鼠标移动事件<BR>function handleMouseMove() {<BR> var oEvent = EventUtil.getEvent();<BR> var oDiv = document.getElementById("div1");<BR>//一定要加单位,奶奶的,不然FIREFOX下无效果<BR> oDiv.style.left = (oEvent.clientX - iDiffX)+"px";<BR> oDiv.style.top = (oEvent.clientY - iDiffY)+"px";<BR>} 
//鼠标移动事件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";}
 
//鼠标按下事件<BR>function handleMouseDown() {<BR> var oEvent = EventUtil.getEvent();<BR> var oDiv = document.getElementById("div1");<BR> iDiffX = oEvent.clientX - oDiv.offsetLeft;<BR> iDiffY = oEvent.clientY - oDiv.offsetTop;<BR> <BR> EventUtil.addEventHandler(document.body, "mousemove", handleMouseMove);<BR> EventUtil.addEventHandler(document.body, "mouseup", handleMouseUp);<BR>} 
//鼠标按下事件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);}
 
//鼠标抬起时间<BR>function handleMouseUp() {<BR> var oEvent = EventUtil.getEvent();<BR> EventUtil.removeEventHandler(document.body, "mousemove", handleMouseMove);<BR> EventUtil.removeEventHandler(document.body, "mouseup", handleMouseUp);<BR> if(isOverDropTarget(oEvent.clientX, oEvent.clientY)) {<BR>  alert("dropped!");<BR>  var oDiv = document.getElementById("div1");<BR>  var oTarget = document.getElementById("divDropTarget");<BR>  oDiv.style.left = oTarget.offsetLeft+"px";<BR>  oDiv.style.top = oTarget.offsetTop+"px";<BR> }<BR>} 
//鼠标抬起时间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"; }}
 
//判断是否在层里面<BR>function isOverDropTarget(iX, iY) {<BR> var oTarget = document.getElementById("divDropTarget");<BR> var iX1 = oTarget.offsetLeft;<BR> var iX2 = iX1 + oTarget.offsetWidth;<BR> var iY1 = oTarget.offsetTop;<BR> var iY2 = iY1 + oTarget.offsetHeight;<BR> <BR> return (iX >= iX1 && iX <= iX2 && iY >= iY1 && iY <= iY2);<BR>}<BR></script> 
//判断是否在层里面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代码: 
HTML代码:
 
/////////////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////////////
 
<p><div id="div1" onmousedown="handleMouseDown(event)"></div></p><BR><p><div id="divDropTarget"></div></p>

分享到:
评论

相关推荐

    javascript学习笔记2

    ### JavaScript 学习笔记2:字符串与事件对象总结 #### 字符串操作方法总结 在JavaScript中,字符串是一系列字符的有序集合。JavaScript提供了一系列内置的方法来帮助我们处理字符串,这些方法可以用来检索、替换...

    JavaScript学习笔记.doc

    1. **地图搜索**:JavaScript被用于实现交互式地图,如Google Maps,用户可以放大、缩小、拖动地图,查找路径等功能都离不开JavaScript。 2. **网页游戏**:许多在线游戏使用JavaScript创建动态游戏场景,处理用户...

    Bootstrap学习笔记之Nestable可拖拽树结构

    Bootstrap学习笔记之Nestable可拖拽树结构 Bootstrap是一个流行的前端开发框架,它提供了丰富的组件和工具,帮助开发者快速构建响应式、移动优先的网页。在本篇学习笔记中,我们将聚焦于Nestable,这是一个基于...

    google map api 学习笔记

    这篇学习笔记主要涵盖以下几个核心知识点: 1. **API密钥获取**: 在使用谷歌地图API之前,首先需要在Google Cloud Console上创建一个项目,并启用谷歌地图JavaScript API服务。接着,为该项目生成API密钥,这是与...

    qt经典学习笔记

    这篇"qt经典学习笔记"很可能是作者在深入理解QT的过程中,逐步积累并整理的知识结晶。以下将基于这个标题和描述,以及可能包含在文档"qt经典学习笔记1.doc"中的内容,来阐述QT学习的一些关键知识点。 1. **QT基础...

    ajax的学习笔记

    本学习笔记将从基础概念、核心组成部分、工作原理以及实际应用等方面进行深入探讨。** ### 一、基础概念 1. **异步通信**:Ajax的核心特性是异步,即在不刷新整个页面的情况下与服务器交换数据并局部更新页面。 2...

    Ajax的学习笔记

    本压缩包中的"AJAX学习笔记.doc"文档,可能包含了Ajax的基础概念、使用示例及进阶技巧,适合初学者参考学习。同时,推荐以下在线资源: - [MDN Web文档](https://developer.mozilla.org/zh-CN/docs/AJAX):详尽的...

    openlayer学习笔记

    ### OpenLayer 学习笔记 #### 一、OpenLayer 概述 OpenLayer 是一个用于显示基于网络的地图的高性能开源JavaScript库。它提供了强大的功能来处理各种地理空间数据,并允许开发者构建复杂的地理信息系统(GIS)应用...

    js-ShanGuiGu:学习JavaScript尚硅谷课程的个人学习笔记

    "js-ShanGuiGu"很显然是一个学员在学习尚硅谷的JavaScript课程时整理的个人学习笔记,旨在记录和巩固所学知识。 JavaScript与HTML密切相关,HTML(超文本标记语言)是网页内容的基础结构,而JavaScript则赋予这些...

    经典ajax学习笔记

    以下是一份详细的Ajax学习笔记,涵盖了其基本概念、工作原理、优势与限制,以及实际应用。 ### 一、基本概念 Ajax的核心是JavaScript对象XMLHttpRequest(XHR),它允许浏览器在后台与服务器进行通信,而不会打断...

    FusionCharts图表工具实例学习笔记

    本学习笔记将深入探讨如何使用FusionCharts工具进行图表的创建、配置和自定义,以帮助你更好地理解和应用这一工具。 一、FusionCharts概述 FusionCharts是一个基于Web的图表解决方案,它使用SVG(Scalable Vector ...

    mapxtreme学习笔记

    这篇学习笔记将涵盖MapXtreme的基本概念、核心功能、使用方法以及常见问题解决。 1. **基本概念** - 地图对象:MapXtreme中的核心元素,包括地图、图层、图例、比例尺等。 - 数据源:地图数据的来源,如Shapefile...

    HTML5 Canvas学习笔记(1)处理鼠标事件

    这篇“HTML5 Canvas学习笔记(1)处理鼠标事件”着重讲解了如何利用Canvas API来监听和响应鼠标的点击、移动等事件。 Canvas API提供了几个关键的方法来处理鼠标事件,包括`addEventListener`用于绑定事件处理函数,`...

    dojo学习笔记

    ### Dojo学习笔记详解 #### 一、Dojo基本概念 Dojo是一个强大的JavaScript库,旨在简化复杂的Web应用程序开发过程。它由三个主要部分组成:`dojo`、`dijit`和`dojox`。 1. **Dojo基础**: - **概述**:Dojo的...

    opengl学习笔记

    本学习笔记旨在帮助初学者掌握OpenGL编程的基础知识,尤其针对坐标变换和图形管线有深入的探讨。 首先,OpenGL图形管线是其核心概念之一,它是从几何形状到屏幕像素的处理流程。管线可以分为几个阶段:顶点着色器、...

Global site tag (gtag.js) - Google Analytics