dom-drag.js
上传用户:shen332233
上传日期:2021-09-03
资源大小:7478k
文件大小:4k
源码类别:

Ajax

开发平台:

Java

  1. /**************************************************
  2.  * dom-drag.js
  3.  * 09.25.2001
  4.  * www.youngpup.net
  5.  **************************************************
  6.  * 10.28.2001 - fixed minor bug where events
  7.  * sometimes fired off the handle, not the root.
  8.  **************************************************/
  9. var Drag = {
  10.     obj : null,
  11.     init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
  12.     {
  13.         o.onmousedown    = Drag.start;
  14.         o.hmode            = bSwapHorzRef ? false : true ;
  15.         o.vmode            = bSwapVertRef ? false : true ;
  16.         o.root = oRoot && oRoot != null ? oRoot : o ;
  17.         if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
  18.         if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
  19.         if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
  20.         if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";
  21.         o.minX    = typeof minX != 'undefined' ? minX : null;
  22.         o.minY    = typeof minY != 'undefined' ? minY : null;
  23.         o.maxX    = typeof maxX != 'undefined' ? maxX : null;
  24.         o.maxY    = typeof maxY != 'undefined' ? maxY : null;
  25.         o.xMapper = fXMapper ? fXMapper : null;
  26.         o.yMapper = fYMapper ? fYMapper : null;
  27.         o.root.onDragStart    = new Function();
  28.         o.root.onDragEnd    = new Function();
  29.         o.root.onDrag        = new Function();
  30.     },
  31.     start : function(e)
  32.     {
  33.         var o = Drag.obj = this;
  34.         e = Drag.fixE(e);
  35.         var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
  36.         var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
  37.         o.root.onDragStart(x, y);
  38.         o.lastMouseX    = e.clientX;
  39.         o.lastMouseY    = e.clientY;
  40.         if (o.hmode) {
  41.             if (o.minX != null)    o.minMouseX    = e.clientX - x + o.minX;
  42.             if (o.maxX != null)    o.maxMouseX    = o.minMouseX + o.maxX - o.minX;
  43.         } else {
  44.             if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
  45.             if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
  46.         }
  47.         if (o.vmode) {
  48.             if (o.minY != null)    o.minMouseY    = e.clientY - y + o.minY;
  49.             if (o.maxY != null)    o.maxMouseY    = o.minMouseY + o.maxY - o.minY;
  50.         } else {
  51.             if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
  52.             if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
  53.         }
  54.         document.onmousemove    = Drag.drag;
  55.         document.onmouseup        = Drag.end;
  56.         return false;
  57.     },
  58.     drag : function(e)
  59.     {
  60.         e = Drag.fixE(e);
  61.         var o = Drag.obj;
  62.         var ey    = e.clientY;
  63.         var ex    = e.clientX;
  64.         var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
  65.         var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
  66.         var nx, ny;
  67.         if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
  68.         if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
  69.         if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
  70.         if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);
  71.         nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
  72.         ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));
  73.         if (o.xMapper)        nx = o.xMapper(y)
  74.         else if (o.yMapper)    ny = o.yMapper(x)
  75.         Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
  76.         Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
  77.         Drag.obj.lastMouseX    = ex;
  78.         Drag.obj.lastMouseY    = ey;
  79.         Drag.obj.root.onDrag(nx, ny);
  80.         return false;
  81.     },
  82.     end : function()
  83.     {
  84.         document.onmousemove = null;
  85.         document.onmouseup   = null;
  86.         Drag.obj.root.onDragEnd(    parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
  87.                                     parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
  88.         Drag.obj = null;
  89.     },
  90.     fixE : function(e)
  91.     {
  92.         if (typeof e == 'undefined') e = window.event;
  93.         if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
  94.         if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
  95.         return e;
  96.     }
  97. };