123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- define("dojox/mdnd/AutoScroll", ["dojo/_base/kernel","dojo/_base/declare","dojo/_base/lang","dojo/_base/connect",
- "dojo/_base/window"],function(dojo){
- var as = dojo.declare(
- "dojox.mdnd.AutoScroll",
- null,
- {
- // summary:
- // Activate scrolling while dragging a widget.
-
- // interval: Integer
- // default mouse move offset
- interval: 3,
-
- // recursiveTimer: Integer
- recursiveTimer: 10,
-
- // marginMouse: Integer
- // Default mouse margin
- marginMouse: 50,
-
- constructor: function(){
- //console.log("dojox.mdnd.AutoScroll ::: constructor ");
- this.resizeHandler = dojo.connect(dojo.global,"onresize", this, function(){
- this.getViewport();
- });
- dojo.ready(dojo.hitch(this, "init"));
- },
-
- init: function(){
- //console.log("dojox.mdnd.AutoScroll ::: init ");
- this._html = (dojo.isWebKit) ? dojo.body() : dojo.body().parentNode;
- this.getViewport();
- },
-
- getViewport:function(){
- // summary:
- // Set the visible part of the window. Varies accordion to Navigator.
-
- //console.log("dojox.mdnd.AutoScroll ::: getViewport ");
- var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
- if(dojo.isMozilla){
- this._v = { 'w': dd.clientWidth, 'h': w.innerHeight }; // Object
- }
- else if(!dojo.isOpera && w.innerWidth){
- this._v = { 'w': w.innerWidth, 'h': w.innerHeight }; // Object
- }
- else if(!dojo.isOpera && dd && dd.clientWidth){
- this._v = { 'w': dd.clientWidth, 'h': dd.clientHeight }; // Object
- }
- else if(b.clientWidth){
- this._v = { 'w': b.clientWidth, 'h': b.clientHeight }; // Object
- }
- },
-
- setAutoScrollNode: function(/*Node*/node){
- // summary:
- // set the node which is dragged
- // node:
- // node to scroll
-
- //console.log("dojox.mdnd.AutoScroll ::: setAutoScrollNode ");
- this._node = node;
- },
-
- setAutoScrollMaxPage: function(){
- // summary:
- // Set the hightest heigh and width authorized scroll.
-
- //console.log("dojox.mdnd.AutoScroll ::: setAutoScrollMaxPage ");
- this._yMax = this._html.scrollHeight;
- this._xMax = this._html.scrollWidth;
- },
-
- checkAutoScroll: function(/*Event*/e){
- // summary:
- // Check if an autoScroll have to be launched.
-
- //console.log("dojox.mdnd.AutoScroll ::: checkAutoScroll");
- if(this._autoScrollActive){
- this.stopAutoScroll();
- }
- this._y = e.pageY;
- this._x = e.pageX;
- if(e.clientX < this.marginMouse){
- this._autoScrollActive = true;
- this._autoScrollLeft(e);
- }
- else if(e.clientX > this._v.w - this.marginMouse){
- this._autoScrollActive = true;
- this._autoScrollRight(e);
- }
- if(e.clientY < this.marginMouse){
- this._autoScrollActive = true;
- this._autoScrollUp(e);
-
- }
- else if(e.clientY > this._v.h - this.marginMouse){
- this._autoScrollActive = true;
- this._autoScrollDown();
- }
- },
-
- _autoScrollDown: function(){
- // summary:
- // Manage the down autoscroll.
- // tags:
- // protected
-
- //console.log("dojox.mdnd.AutoScroll ::: _autoScrollDown ");
- if(this._timer){
- clearTimeout(this._timer);
- }
- if(this._autoScrollActive && this._y + this.marginMouse < this._yMax){
- this._html.scrollTop += this.interval;
- this._node.style.top = (parseInt(this._node.style.top) + this.interval) + "px";
- this._y += this.interval;
- this._timer = setTimeout(dojo.hitch(this, "_autoScrollDown"), this.recursiveTimer);
- }
- },
-
- _autoScrollUp: function(){
- // summary:
- // Manage the up autoscroll.
- // tags:
- // protected
-
- //console.log("dojox.mdnd.AutoScroll ::: _autoScrollUp ");
- if(this._timer){
- clearTimeout(this._timer);
- }
- if(this._autoScrollActive && this._y - this.marginMouse > 0){
- this._html.scrollTop -= this.interval;
- this._node.style.top = (parseInt(this._node.style.top) - this.interval) + "px";
- this._y -= this.interval;
- this._timer = setTimeout(dojo.hitch(this, "_autoScrollUp"),this.recursiveTimer);
- }
- },
-
- _autoScrollRight: function(){
- // summary:
- // Manage the right autoscroll.
- // tags:
- // protected
-
- //console.log("dojox.mdnd.AutoScroll ::: _autoScrollRight ");
- if(this._timer){
- clearTimeout(this._timer);
- }
- if(this._autoScrollActive && this._x + this.marginMouse < this._xMax){
- this._html.scrollLeft += this.interval;
- this._node.style.left = (parseInt(this._node.style.left) + this.interval) + "px";
- this._x += this.interval;
- this._timer = setTimeout(dojo.hitch(this, "_autoScrollRight"), this.recursiveTimer);
- }
- },
-
- _autoScrollLeft: function(/*Event*/e){
- // summary:
- // Manage the left autoscroll.
- // tags:
- // protected
-
- //console.log("dojox.mdnd.AutoScroll ::: _autoScrollLeft ");
- if(this._timer){
- clearTimeout(this._timer);
- }
- if(this._autoScrollActive && this._x - this.marginMouse > 0){
- this._html.scrollLeft -= this.interval;
- this._node.style.left = (parseInt(this._node.style.left) - this.interval) + "px";
- this._x -= this.interval;
- this._timer = setTimeout(dojo.hitch(this, "_autoScrollLeft"),this.recursiveTimer);
- }
- },
-
- stopAutoScroll: function(){
- // summary:
- // Stop the autoscroll.
-
- //console.log("dojox.mdnd.AutoScroll ::: stopAutoScroll ");
- if(this._timer){
- clearTimeout(this._timer);
- }
- this._autoScrollActive = false;
- },
-
- destroy: function(){
- //console.log("dojox.mdnd.AutoScroll ::: destroy ");
- dojo.disconnect(this.resizeHandler);
- }
- });
-
- dojox.mdnd.autoScroll = null;
-
- dojox.mdnd.autoScroll = new dojox.mdnd.AutoScroll();
- return as;
- });
|