You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.9 KiB
85 lines
1.9 KiB
13 years ago
|
/*
|
||
|
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
|
||
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
|
see: http://dojotoolkit.org/license for details
|
||
|
*/
|
||
|
|
||
|
|
||
|
if(!dojo._hasResource["dojo.dnd.autoscroll"]){
|
||
|
dojo._hasResource["dojo.dnd.autoscroll"]=true;
|
||
|
dojo.provide("dojo.dnd.autoscroll");
|
||
|
dojo.require("dojo.window");
|
||
|
dojo.getObject("dnd",true,dojo);
|
||
|
dojo.dnd.getViewport=dojo.window.getBox;
|
||
|
dojo.dnd.V_TRIGGER_AUTOSCROLL=32;
|
||
|
dojo.dnd.H_TRIGGER_AUTOSCROLL=32;
|
||
|
dojo.dnd.V_AUTOSCROLL_VALUE=16;
|
||
|
dojo.dnd.H_AUTOSCROLL_VALUE=16;
|
||
|
dojo.dnd.autoScroll=function(e){
|
||
|
var v=dojo.window.getBox(),dx=0,dy=0;
|
||
|
if(e.clientX<dojo.dnd.H_TRIGGER_AUTOSCROLL){
|
||
|
dx=-dojo.dnd.H_AUTOSCROLL_VALUE;
|
||
|
}else{
|
||
|
if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){
|
||
|
dx=dojo.dnd.H_AUTOSCROLL_VALUE;
|
||
|
}
|
||
|
}
|
||
|
if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){
|
||
|
dy=-dojo.dnd.V_AUTOSCROLL_VALUE;
|
||
|
}else{
|
||
|
if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){
|
||
|
dy=dojo.dnd.V_AUTOSCROLL_VALUE;
|
||
|
}
|
||
|
}
|
||
|
window.scrollBy(dx,dy);
|
||
|
};
|
||
|
dojo.dnd._validNodes={"div":1,"p":1,"td":1};
|
||
|
dojo.dnd._validOverflow={"auto":1,"scroll":1};
|
||
|
dojo.dnd.autoScrollNodes=function(e){
|
||
|
for(var n=e.target;n;){
|
||
|
if(n.nodeType==1&&(n.tagName.toLowerCase() in dojo.dnd._validNodes)){
|
||
|
var s=dojo.getComputedStyle(n);
|
||
|
if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
|
||
|
var b=dojo._getContentBox(n,s),t=dojo.position(n,true);
|
||
|
var w=Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL,b.w/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx=e.pageX-t.x,ry=e.pageY-t.y,dx=0,dy=0;
|
||
|
if(dojo.isWebKit||dojo.isOpera){
|
||
|
rx+=dojo.body().scrollLeft;
|
||
|
ry+=dojo.body().scrollTop;
|
||
|
}
|
||
|
if(rx>0&&rx<b.w){
|
||
|
if(rx<w){
|
||
|
dx=-w;
|
||
|
}else{
|
||
|
if(rx>b.w-w){
|
||
|
dx=w;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(ry>0&&ry<b.h){
|
||
|
if(ry<h){
|
||
|
dy=-h;
|
||
|
}else{
|
||
|
if(ry>b.h-h){
|
||
|
dy=h;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
var _1=n.scrollLeft,_2=n.scrollTop;
|
||
|
n.scrollLeft=n.scrollLeft+dx;
|
||
|
n.scrollTop=n.scrollTop+dy;
|
||
|
if(_1!=n.scrollLeft||_2!=n.scrollTop){
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
try{
|
||
|
n=n.parentNode;
|
||
|
}
|
||
|
catch(x){
|
||
|
n=null;
|
||
|
}
|
||
|
}
|
||
|
dojo.dnd.autoScroll(e);
|
||
|
};
|
||
|
}
|