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(); |
---|