aboutsummaryrefslogtreecommitdiffstats
path: root/src/angular/infinite-scroll/infinite-scroll.directive.ts
diff options
context:
space:
mode:
authorMichael Lando <ml636r@att.com>2018-05-21 20:19:48 +0000
committerGerrit Code Review <gerrit@onap.org>2018-05-21 20:19:48 +0000
commit05b37297177e8a342668c15e5d6f738b51f7aedd (patch)
treee236c96df52a13f935292db8aa73e84d0c41ad8a /src/angular/infinite-scroll/infinite-scroll.directive.ts
parent884dfb789593d2a3cc319047ab1f0215778aec9f (diff)
parent1994c98063c27a41797dec01f2ca9fcbe33ceab0 (diff)
Merge "init commit onap ui"HEAD2.0.0-ONAPmasterbeijing2.0.0-ONAP
Diffstat (limited to 'src/angular/infinite-scroll/infinite-scroll.directive.ts')
-rw-r--r--src/angular/infinite-scroll/infinite-scroll.directive.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/angular/infinite-scroll/infinite-scroll.directive.ts b/src/angular/infinite-scroll/infinite-scroll.directive.ts
new file mode 100644
index 0000000..a8ea9f4
--- /dev/null
+++ b/src/angular/infinite-scroll/infinite-scroll.directive.ts
@@ -0,0 +1,35 @@
+import { Directive, ElementRef, Output, EventEmitter, HostListener, Input } from "@angular/core";
+
+@Directive({
+ selector: '[infiniteScroll]'
+})
+export class InfiniteScrollDirective {
+ @Input() public infiniteScrollDistance: number = 0;
+ @Output() public infiniteScroll: EventEmitter<void>;
+
+ private scrollWasHit: boolean = false;
+
+ constructor(private elemRef: ElementRef) {
+ this.infiniteScroll = new EventEmitter<void>();
+ }
+
+ @HostListener('scroll', ['$event'])
+ public onScroll(evt) {
+ const scrollContainerElem: HTMLElement = evt.target;
+ if (scrollContainerElem !== this.elemRef.nativeElement) {
+ return;
+ }
+
+ if (scrollContainerElem.scrollTop + scrollContainerElem.clientHeight + this.infiniteScrollDistance >=
+ scrollContainerElem.scrollHeight) {
+ // hit only once when entering the distance area from bottom
+ // (avoid emitting the handler while scrolling in the bottom area)
+ if (!this.scrollWasHit) {
+ this.infiniteScroll.emit();
+ this.scrollWasHit = true;
+ }
+ } else if (this.scrollWasHit) {
+ this.scrollWasHit = false;
+ }
+ }
+}