all files / src/ scroll-detector.ts

100% Statements 20/20
100% Branches 12/12
100% Functions 4/4
100% Lines 18/18
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                             
import { DOMManager } from "./dom-manager";
 
export class ScrollDetector {
    private lastScrollTop = 0;
    private BUFFER_COUNT = 5;
 
    constructor(private element: ng.IAugmentedJQuery) { }
 
    public SubscribeToElement = () => {
        const parentEl: HTMLElement = this.element.parent()[0];
 
        parentEl.onscroll = () => {
            if (this.lastScrollTop < parentEl.scrollTop) {
                const current = parentEl.scrollTop + parentEl.offsetHeight;
                const bottom = parentEl.scrollHeight;
 
                if (current == bottom) {
                    this.OnScrollDown && this.OnScrollDown();
                }
            } else if (this.lastScrollTop > parentEl.scrollTop) {
                const topElement = parentEl.children[0];
                if (parentEl.scrollTop <= (topElement.clientHeight * this.BUFFER_COUNT)) {
                    this.OnScrollUp && this.OnScrollUp();
                }
            }
            this.lastScrollTop = parentEl.scrollTop;
        };
    }
 
    public OnScrollDown?: () => void;
    public OnScrollUp?: () => void;
}