client/servlet/www/static/js/dom-drag.js

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