source: trunk/instant_messenger/js/dragdrop.js @ 321

Revision 321, 3.3 KB checked in by niltonneto, 16 years ago (diff)

Correçoes

RevLine 
[305]1(function()
[260]2{
[305]3        var _element = null;
[260]4
[305]5        function _config(pObj, pEvent, pHandler)
[260]6        {
[305]7                if ( typeof pObj == 'object' )
[260]8                {
[305]9                        if ( pEvent.substring(0, 2) == 'on' )
10                                pEvent = pEvent.substring(2, pEvent.length);
11
12                        if ( arguments.length == 3 )
[260]13                        {
[305]14                                if ( pObj.addEventListener )
15                                        pObj.addEventListener(pEvent, pHandler, false);
16                                else if ( pObj.attachEvent )
17                                        pObj.attachEvent('on' + pEvent, pHandler);
18                        }
19                        else if ( arguments.length == 4 )
20                        {
21                                if ( pObj.removeEventListener )
22                                        pObj.removeEventListener(pEvent, pHandler, false);
23                                else if ( pObj.detachEvent )
24                                        pObj.detachEvent('on' + pEvent, pHandler);
25                        }
26                }
27        }
[260]28
[305]29        function _getMouseOffset(e, el)
30        {
31                var docPos = _getPosition(el);
32                var mousePos = _mouseCoords(e);
33                return {
34                        'x' : mousePos.x - docPos.x,
35                        'y' : mousePos.y - docPos.y
36                };
37        }
[260]38
[305]39        function _getPosition(_pObject)
40        {
41                var left = 0;
42                var top  = 0;
[260]43
[305]44                while ( _pObject.offsetParent )
45                {
46                        left += _pObject.offsetLeft;
47                        top  += _pObject.offsetTop;
48                        _pObject = _pObject.offsetParent;
49                }
[260]50
[305]51                left += _pObject.offsetLeft;
52                top  += _pObject.offsetTop;
[260]53
[305]54                return {
55                        'x' : left,
56                        'y' : top
57                };
58        }
[260]59
[305]60        function _mouseCoords(ev)
61        {
62                var CoordX = "";
63                var CoordY = "";
[260]64
[305]65                if ( ev.pageX || ev.pageY )
66                        return {
67                                'x' : ev.pageX,
68                                'y' : ev.pageY
69                        };
[260]70
[305]71                CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft;
72                CoordY = ev.clientY + document.body.scrollTop  - document.body.clientTop;
73                return {
74                        'x' : CoordX,
75                        'y' : CoordY
76                };
77        }
78
79        function _mouseMove(e)
80        {
81                if ( _element )
[260]82                {
[305]83                        if ( _element.mouseOffset == null )
84                                _element.mouseOffset = _getMouseOffset(e, _element);
85
86                        var mousePos = _mouseCoords(e);
87
88                        var x = mousePos.x - _element.mouseOffset.x;
89                        var y = mousePos.y - _element.mouseOffset.y;
[321]90                        _element.style.left = (( x < 0 ) ? 0 : x) + 'px';
91                        _element.style.top  = (( y < 0 ) ? 0 : y) + 'px';
[260]92                }
[305]93        }
94
95        function _mouseUp()
96        {
97                if ( _element )
[260]98                {
[305]99                        _config(_element, 'onmousemove', _mouseMove, 'remove');
100                        _config(top.document, 'onmousemove', _mouseMove, 'remove');
[260]101
[305]102                        _config(_element, 'onmouseup', _mouseUp, 'remove');
103                        _config(top.document, 'onmouseup', _mouseUp, 'remove');
[260]104
[305]105                        _element.mouseOffset = null;
106                        _element = null;
107                }
108        }
[260]109
[305]110        function _toDrag(el)
111        {
112                if ( el.getAttribute('dragdrop_parent') == null )
113                {
114                        if ( el.getAttribute('dragdrop_child') != null )
[260]115                        {
[305]116                                var children = 0;
117                                while ( (++children < 5) && (el.getAttribute('dragdrop_parent') == null) )
118                                        el = el.parentNode;
119                        }
120                        if ( el.getAttribute('dragdrop_parent') == null )
121                                el = false;
122                }
123                return el;
124        }
[260]125
[305]126        function _drag(e)
127        {
128                if (typeof e.preventDefault != 'undefined')
129                        e.preventDefault();
130                else
[318]131                        e.onselectstart = new Function("return false;");
[260]132
[305]133                var el = ( e.target ) ? e.target : e.srcElement;
[260]134
[305]135                el = _toDrag(el);
[260]136
[305]137                if ( el )
138                {
139                        _element = el;
[260]140
[305]141                        _config(el, 'onmousemove', _mouseMove);
142                        _config(top.document, 'onmousemove', _mouseMove);
[260]143
[305]144                        _config(el, 'onmouseup', _mouseUp);
145                        _config(top.document, 'onmouseup', _mouseUp);
146                }
147        }
[260]148
[305]149        function _set(_pObject)
150        {
151                if ( typeof _pObject != 'object' )
152                        return false;
[260]153
[305]154                _pObject.setAttribute('dragdrop_parent', 'true');
155
156                _config(_pObject, 'onmousedown', _drag);
[260]157        }
158
[305]159        function DragDrop()
160        {
161        }
162
163        DragDrop.prototype.drag = _set;
164        window.DragDrop = DragDrop;
165}
166)();
Note: See TracBrowser for help on using the repository browser.