AutoScroll¶
-
class
webix.
AutoScroll
()¶ Autoscroll mixin
References¶
- helpers
delay()
.
Referenced by¶
- mixins
DragItem()
.- helpers
dateFilter
.
External references¶
Code¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | webix.AutoScroll = {
_auto_scroll:function(pos, id){
var yscroll = 1;
var xscroll = 0;
var scroll = this._settings.dragscroll;
if (typeof scroll == "string"){
xscroll = scroll.indexOf("x") != -1;
yscroll = scroll.indexOf("y") != -1;
}
var data = this._body || this.$view;
var box = webix.html.offset(data);
var top = box.y;
var bottom = top + data.offsetHeight;
var left = box.x;
var right = left + data.offsetWidth;
var scroll = this.getScrollState();
var reset = false;
var sense = Math.max(this.type&&!isNaN(parseFloat(this.type.height))?this.type.height+5:0,40); //dnd auto-scroll sensivity
if (yscroll){
var config = this._settings;
if(config.topSplit){
var topSplitPos = this._cellPosition(this.getIdByIndex(config.topSplit-1), this.columnId(0));
top += topSplitPos.top + topSplitPos.height;
}
if (pos.y < (top + sense)){
this._auto_scrollTo(scroll.x, scroll.y-sense*2, pos);
reset = true;
} else if (pos.y > bottom - sense){
this._auto_scrollTo(scroll.x, scroll.y+sense*2, pos);
reset = true;
}
}
if (xscroll){
if (pos.x < (left + sense)){
this._auto_scrollTo(scroll.x-sense*2, scroll.y, pos);
reset = true;
} else if (pos.x > right - sense){
this._auto_scrollTo(scroll.x+sense*2, scroll.y, pos);
reset = true;
}
}
if (reset)
this._auto_scroll_delay = webix.delay(this._auto_scroll, this, [pos], 100);
},
_auto_scrollTo: function(x,y,pos){
if(this.callEvent("onBeforeAutoScroll",[pos]))
this.scrollTo(x,y);
}
};
|