[151] | 1 | /** |
---|
| 2 | * @AUTHOR: Alexandre Correia - alexandrecorreia [.at.] celepar [.dot.] pr [.dot.] gov [.dot.] br |
---|
| 3 | * @AUTHOR: Rodrigo Souza - rodrigosouzadossantos [.at.] gmail [.dot.] com |
---|
| 4 | * @COPYLEFT: GPL - http://www.gnu.org/copyleft/gpl.html |
---|
| 5 | * @DATE: 10/10/2007 |
---|
| 6 | * @LAST CHANGE: 11/10/2007 |
---|
| 7 | * @BRIEF: |
---|
| 8 | **/ |
---|
| 9 | |
---|
| 10 | function DragDrop() |
---|
| 11 | { |
---|
| 12 | this.dragObject = null; |
---|
| 13 | this.mouseOffset = null; |
---|
| 14 | this.documentMouseMove = null; |
---|
| 15 | this.documentMouseUp = null; |
---|
| 16 | |
---|
| 17 | } |
---|
| 18 | |
---|
| 19 | DragDrop.prototype = { |
---|
| 20 | "drag" : function(ev, pObject) |
---|
| 21 | { |
---|
| 22 | function mouseMove(pEv, pObject, pTarget) |
---|
| 23 | { |
---|
| 24 | function getMouseOffset(pThis, target, pEv) |
---|
| 25 | { |
---|
| 26 | function getPosition(pObject) |
---|
| 27 | { |
---|
| 28 | try |
---|
| 29 | { |
---|
| 30 | var left = 0; |
---|
| 31 | var top = 0; |
---|
| 32 | |
---|
| 33 | while (pObject.offsetParent) |
---|
| 34 | { |
---|
| 35 | left += pObject.offsetLeft; |
---|
| 36 | top += pObject.offsetTop; |
---|
| 37 | pObject = pObject.offsetParent; |
---|
| 38 | } |
---|
| 39 | |
---|
| 40 | left += pObject.offsetLeft; |
---|
| 41 | top += pObject.offsetTop; |
---|
| 42 | |
---|
| 43 | return {x:left, y:top}; |
---|
| 44 | }catch(e){} |
---|
| 45 | } |
---|
| 46 | try |
---|
| 47 | { |
---|
| 48 | var ev = pEv || window.event; |
---|
| 49 | |
---|
| 50 | var docPos = getPosition(target); |
---|
| 51 | var mousePos = mouseCoords(ev); |
---|
| 52 | return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y}; |
---|
| 53 | } |
---|
| 54 | catch(e){} |
---|
| 55 | } |
---|
| 56 | function mouseCoords(pEv) |
---|
| 57 | { |
---|
| 58 | try |
---|
| 59 | { |
---|
| 60 | var ev = pEv; |
---|
| 61 | var CoordX = ""; |
---|
| 62 | var CoordY = ""; |
---|
| 63 | |
---|
| 64 | if(ev.pageX || ev.pageY) |
---|
| 65 | return {x:ev.pageX, y:ev.pageY}; |
---|
| 66 | |
---|
| 67 | CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft; |
---|
| 68 | CoordY = ev.clientY + document.body.scrollTop - document.body.clientTop; |
---|
| 69 | return { x:CoordX, y:CoordY }; |
---|
| 70 | } |
---|
| 71 | catch(e){} |
---|
| 72 | } |
---|
| 73 | try |
---|
| 74 | { |
---|
| 75 | if ( pObject.mouseOffset == null ) |
---|
| 76 | pObject.mouseOffset = getMouseOffset(pObject, pTarget, pEv); |
---|
| 77 | |
---|
| 78 | var ev = pEv || window.event; |
---|
| 79 | var mousePos = mouseCoords(ev); |
---|
| 80 | |
---|
| 81 | if( pObject.dragObject ) |
---|
| 82 | { |
---|
| 83 | var x = mousePos.x - pObject.mouseOffset.x; |
---|
| 84 | var y = mousePos.y - pObject.mouseOffset.y; |
---|
| 85 | pObject.dragObject.style.left = ( x < 0 ) ? 0 : x; |
---|
| 86 | pObject.dragObject.style.top = ( y < 0 ) ? 0 : y; |
---|
| 87 | } |
---|
| 88 | if ( typeof pObject.documentMouseMove == 'function' ) |
---|
| 89 | pObject.documentMouseMove(); |
---|
| 90 | } |
---|
| 91 | catch(e){} |
---|
| 92 | } |
---|
| 93 | function mouseUp(pObject) |
---|
| 94 | { |
---|
| 95 | try |
---|
| 96 | { |
---|
| 97 | if ( typeof pObject.documentMouseUp == 'function' ) |
---|
| 98 | pObject.documentMouseUp(); |
---|
| 99 | pObject.dragObject = null; |
---|
| 100 | document.onmousemove = pObject.documentMouseMove; |
---|
| 101 | document.onmouseup = pObject.documentMouseUp; |
---|
| 102 | pObject.documentMouseMove = pObject.documentMouseUp = null; |
---|
| 103 | pObject.mouseOffset = null; |
---|
| 104 | } |
---|
| 105 | catch(e){} |
---|
| 106 | } |
---|
| 107 | try |
---|
| 108 | { |
---|
| 109 | if( !pObject ) |
---|
| 110 | return; |
---|
| 111 | |
---|
| 112 | if (typeof ev.preventDefault != 'undefined') |
---|
| 113 | ev.preventDefault(); |
---|
| 114 | else |
---|
| 115 | pObject.onselectstart = new Function("return false;"); |
---|
| 116 | |
---|
| 117 | this.mouseOffset = null; |
---|
| 118 | |
---|
| 119 | if ( pObject.getAttribute('dragdrop') === "true" ) |
---|
| 120 | { |
---|
| 121 | var _this = this; |
---|
| 122 | pObject.style.cursor = "pointer"; |
---|
| 123 | pObject.style.position = 'absolute'; |
---|
| 124 | |
---|
| 125 | pObject.onmousemove = function(ev) |
---|
| 126 | { |
---|
| 127 | mouseMove(ev, _this, pObject); |
---|
| 128 | }; |
---|
| 129 | |
---|
| 130 | if ( typeof document.onmousemove == 'function' && document.onmousemove != pObject.onmousemove ) |
---|
| 131 | this.documentMouseMove = document.onmousemove; |
---|
| 132 | |
---|
| 133 | document.onmousemove = function(ev) |
---|
| 134 | { |
---|
| 135 | mouseMove(ev, _this, pObject); |
---|
| 136 | }; |
---|
| 137 | |
---|
| 138 | pObject.onmouseup = function() |
---|
| 139 | { |
---|
| 140 | mouseUp(_this); |
---|
| 141 | }; |
---|
| 142 | |
---|
| 143 | if ( typeof document.onmouseup == 'function' && document.onmouseup != pObject.onmouseup ) |
---|
| 144 | this.documentMouseUp = document.onmouseup; |
---|
| 145 | |
---|
| 146 | document.onmouseup = pObject.onmouseup; |
---|
| 147 | |
---|
| 148 | var el = ( window.event ) ? window.event.srcElement : ev.target; |
---|
| 149 | |
---|
| 150 | if ( el.getAttribute('dragdrop') === "true" ) |
---|
| 151 | { |
---|
| 152 | _this.dragObject = pObject; |
---|
| 153 | return false; |
---|
| 154 | } |
---|
| 155 | } |
---|
| 156 | } |
---|
| 157 | catch(e){alert(e.description);} |
---|
| 158 | } |
---|
| 159 | }; |
---|
| 160 | |
---|
| 161 | var drag_drop = new DragDrop(); |
---|