source: Dev/trunk/src/client/dojox/mdnd/AutoScroll.js @ 529

Last change on this file since 529 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 5.5 KB
Line 
1define(["dojo/_base/kernel",
2        "dojo/_base/declare",
3        "dojo/_base/lang",
4        "dojo/_base/connect",
5        "dojo/_base/sniff",
6        "dojo/ready",
7        "dojo/_base/window"
8],function(dojo, declare, lang, connect, sniff, ready){
9        var as = declare(
10                "dojox.mdnd.AutoScroll",
11                null,
12        {
13                // summary:
14                //              Activate scrolling while dragging a widget.
15       
16                // interval: Integer
17                //              default mouse move offset
18                interval: 3,
19       
20                // recursiveTimer: Integer
21                recursiveTimer: 10,
22       
23                // marginMouse: Integer
24                //              Default mouse margin
25                marginMouse: 50,
26       
27                constructor: function(){
28                        //console.log("dojox.mdnd.AutoScroll ::: constructor ");
29                        this.resizeHandler = connect.connect(dojo.global,"onresize", this, function(){
30                                this.getViewport();
31                        });
32                        ready(lang.hitch(this, "init"));
33                },
34       
35                init: function(){
36                        //console.log("dojox.mdnd.AutoScroll ::: init ");
37                        this._html = (sniff("webkit"))? dojo.body() : dojo.body().parentNode;
38                        this.getViewport();
39                },
40       
41                getViewport:function(){
42                        // summary:
43                        //              Set the visible part of the window. Varies accordion to Navigator.
44       
45                        //console.log("dojox.mdnd.AutoScroll ::: getViewport ");
46                        var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
47                        if(dojo.isMozilla){
48                                this._v = { 'w': dd.clientWidth, 'h': w.innerHeight };  // Object
49                        }
50                        else if(!dojo.isOpera && w.innerWidth){
51                                this._v = { 'w': w.innerWidth, 'h': w.innerHeight };            // Object
52                        }
53                        else if(!dojo.isOpera && dd && dd.clientWidth){
54                                this._v = { 'w': dd.clientWidth, 'h': dd.clientHeight };        // Object
55                        }
56                        else if(b.clientWidth){
57                                this._v = { 'w': b.clientWidth, 'h': b.clientHeight };  // Object
58                        }
59                },
60       
61                setAutoScrollNode: function(/*Node*/node){
62                        // summary:
63                        //              set the node which is dragged
64                        // node:
65                        //              node to scroll
66       
67                        //console.log("dojox.mdnd.AutoScroll ::: setAutoScrollNode ");
68                        this._node = node;
69                },
70       
71                setAutoScrollMaxPage: function(){
72                        // summary:
73                        //              Set the hightest heigh and width authorized scroll.
74       
75                        //console.log("dojox.mdnd.AutoScroll ::: setAutoScrollMaxPage ");
76                        this._yMax = this._html.scrollHeight;
77                        this._xMax = this._html.scrollWidth;
78                },
79       
80                checkAutoScroll: function(/*Event*/e){
81                        // summary:
82                        //              Check if an autoScroll have to be launched.
83       
84                        //console.log("dojox.mdnd.AutoScroll ::: checkAutoScroll");
85                        if(this._autoScrollActive){
86                                this.stopAutoScroll();
87                        }
88                        this._y = e.pageY;
89                        this._x = e.pageX;
90                        if(e.clientX < this.marginMouse){
91                                this._autoScrollActive = true;
92                                this._autoScrollLeft(e);
93                        }
94                        else if(e.clientX > this._v.w - this.marginMouse){
95                                this._autoScrollActive = true;
96                                this._autoScrollRight(e);
97                        }
98                        if(e.clientY < this.marginMouse){
99                                this._autoScrollActive = true;
100                                this._autoScrollUp(e);
101                               
102                        }
103                        else if(e.clientY > this._v.h - this.marginMouse){
104                                this._autoScrollActive = true;
105                                this._autoScrollDown();
106                        }
107                },
108       
109                _autoScrollDown: function(){
110                        // summary:
111                        //              Manage the down autoscroll.
112                        // tags:
113                        //              protected
114       
115                        //console.log("dojox.mdnd.AutoScroll ::: _autoScrollDown ");
116                        if(this._timer){
117                                clearTimeout(this._timer);
118                        }
119                        if(this._autoScrollActive && this._y + this.marginMouse < this._yMax){
120                                this._html.scrollTop += this.interval;
121                                this._node.style.top = (parseInt(this._node.style.top) + this.interval) + "px";
122                                this._y += this.interval;
123                                this._timer = setTimeout(lang.hitch(this, "_autoScrollDown"), this.recursiveTimer);
124                        }
125                },
126       
127                _autoScrollUp: function(){
128                        // summary:
129                        //              Manage the up autoscroll.
130                        // tags:
131                        //              protected
132       
133                        //console.log("dojox.mdnd.AutoScroll ::: _autoScrollUp ");
134                        if(this._timer){
135                                clearTimeout(this._timer);
136                        }
137                        if(this._autoScrollActive && this._y - this.marginMouse > 0){
138                                this._html.scrollTop -= this.interval;
139                                this._node.style.top = (parseInt(this._node.style.top) - this.interval) + "px";
140                                this._y -= this.interval;
141                                this._timer = setTimeout(lang.hitch(this, "_autoScrollUp"),this.recursiveTimer);
142                        }
143                },
144       
145                _autoScrollRight: function(){
146                        // summary:
147                        //              Manage the right autoscroll.
148                        // tags:
149                        //              protected
150       
151                        //console.log("dojox.mdnd.AutoScroll ::: _autoScrollRight ");
152                        if(this._timer){
153                                clearTimeout(this._timer);
154                        }
155                        if(this._autoScrollActive && this._x + this.marginMouse < this._xMax){
156                                this._html.scrollLeft += this.interval;
157                                this._node.style.left = (parseInt(this._node.style.left) + this.interval) + "px";
158                                this._x += this.interval;
159                                this._timer = setTimeout(lang.hitch(this, "_autoScrollRight"), this.recursiveTimer);
160                        }
161                },
162       
163                _autoScrollLeft: function(/*Event*/e){
164                        // summary:
165                        //              Manage the left autoscroll.
166                        // tags:
167                        //              protected
168       
169                        //console.log("dojox.mdnd.AutoScroll ::: _autoScrollLeft ");
170                        if(this._timer){
171                                clearTimeout(this._timer);
172                        }
173                        if(this._autoScrollActive && this._x - this.marginMouse > 0){
174                                this._html.scrollLeft -= this.interval;
175                                this._node.style.left = (parseInt(this._node.style.left) - this.interval) + "px";
176                                this._x -= this.interval;
177                                this._timer = setTimeout(lang.hitch(this, "_autoScrollLeft"),this.recursiveTimer);
178                        }
179                },
180       
181                stopAutoScroll: function(){
182                        // summary:
183                        //              Stop the autoscroll.
184                       
185                        //console.log("dojox.mdnd.AutoScroll ::: stopAutoScroll ");
186                        if(this._timer){
187                                clearTimeout(this._timer);
188                        }
189                        this._autoScrollActive = false;
190                },
191       
192                destroy: function(){
193                        //console.log("dojox.mdnd.AutoScroll ::: destroy ");
194                        connect.disconnect(this.resizeHandler);
195                }
196        });
197       
198        dojox.mdnd.autoScroll = null;
199       
200        dojox.mdnd.autoScroll = new dojox.mdnd.AutoScroll();
201        return as;
202});
Note: See TracBrowser for help on using the repository browser.