AutoScroll

class webix.AutoScroll()

Autoscroll mixin

References

helpers
delay().

Referenced by

mixins
DragItem().
helpers
dateFilter.

External references

Official documentation page.

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);
    }
};