UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

95 lines 7.27 kB
/** * @fileoverview added by tsickle * Generated from: lazy-load/lazy-load.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { fromEvent } from 'rxjs'; import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; export class LazyLoadDirective { /** * @param {?} el */ constructor(el) { this.el = el; // 启用懒加载,默认不启用 this.enableLazyLoad = false; // 加载更多 this.loadMore = new EventEmitter(); // 触发懒加载的距离 this.loadFactor = 5; } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes && changes['enableLazyLoad']) { if (changes.enableLazyLoad.currentValue) { this.scrollSubscription = fromEvent(this.el.nativeElement, 'scroll').pipe(debounceTime(300), distinctUntilChanged()).subscribe((/** * @param {?} event * @return {?} */ event => this.scrollList(event))); } else if (this.scrollSubscription) { this.scrollSubscription.unsubscribe(); } else { return; } } } /** * @return {?} */ ngOnDestroy() { if (this.scrollSubscription) { this.scrollSubscription.unsubscribe(); } } /** * @param {?} event * @return {?} */ scrollList(event) { /** @type {?} */ const targetEl = event.target; /** @type {?} */ const clientHeight = targetEl.clientHeight; /** @type {?} */ const scrollHeight = targetEl.scrollHeight; /** @type {?} */ const scrollTop = targetEl.scrollTop; if (scrollTop !== 0 && (scrollTop + clientHeight + this.loadFactor >= scrollHeight)) { this.loadMore.emit(event); } } } LazyLoadDirective.decorators = [ { type: Directive, args: [{ selector: '[dLazyLoad]' },] } ]; /** @nocollapse */ LazyLoadDirective.ctorParameters = () => [ { type: ElementRef } ]; LazyLoadDirective.propDecorators = { enableLazyLoad: [{ type: Input }], loadMore: [{ type: Output }] }; if (false) { /** @type {?} */ LazyLoadDirective.prototype.enableLazyLoad; /** @type {?} */ LazyLoadDirective.prototype.loadMore; /** @type {?} */ LazyLoadDirective.prototype.scrollSubscription; /** @type {?} */ LazyLoadDirective.prototype.loadFactor; /** * @type {?} * @private */ LazyLoadDirective.prototype.el; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL3V0aWxzLyIsInNvdXJjZXMiOlsibGF6eS1sb2FkL2xhenktbG9hZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBZ0IsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXVDLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxNQUFNLE9BQU8saUJBQWlCOzs7O0lBWTVCLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZOztRQVR6QixtQkFBYyxHQUFHLEtBQUssQ0FBQzs7UUFFdEIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7O1FBS3hDLGVBQVUsR0FBRyxDQUFDLENBQUM7SUFFdUIsQ0FBQzs7Ozs7SUFFdkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3hDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN2RSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLG9CQUFvQixFQUFFLENBQ3ZCLENBQUMsU0FBUzs7OztnQkFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQzthQUM5QztpQkFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3ZDO2lCQUFNO2dCQUNMLE9BQU87YUFDUjtTQUNGO0lBQ0gsQ0FBQzs7OztJQUNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxLQUFLOztjQUNSLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTTs7Y0FDdkIsWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZOztjQUNwQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVk7O2NBQ3BDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUztRQUNwQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUU7WUFDbkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7SUFFSCxDQUFDOzs7WUE1Q0YsU0FBUyxTQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTs7OztZQUpsQixVQUFVOzs7NkJBUTNCLEtBQUs7dUJBRUwsTUFBTTs7OztJQUZQLDJDQUFnQzs7SUFFaEMscUNBQXdDOztJQUV4QywrQ0FBaUM7O0lBR2pDLHVDQUFlOzs7OztJQUVILCtCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZExhenlMb2FkXScgfSlcclxuZXhwb3J0IGNsYXNzIExhenlMb2FkRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG5cclxuICAvLyDlkK/nlKjmh5LliqDovb3vvIzpu5jorqTkuI3lkK/nlKhcclxuICBASW5wdXQoKSBlbmFibGVMYXp5TG9hZCA9IGZhbHNlO1xyXG4gIC8vIOWKoOi9veabtOWkmlxyXG4gIEBPdXRwdXQoKSBsb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgc2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8vIOinpuWPkeaHkuWKoOi9veeahOi3neemu1xyXG4gIGxvYWRGYWN0b3IgPSA1O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1snZW5hYmxlTGF6eUxvYWQnXSkge1xyXG4gICAgICBpZiAoY2hhbmdlcy5lbmFibGVMYXp5TG9hZC5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnKS5waXBlKFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zY3JvbGxMaXN0KGV2ZW50KSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Nyb2xsTGlzdChldmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0RWwgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0YXJnZXRFbC5jbGllbnRIZWlnaHQ7XHJcbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0YXJnZXRFbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICBjb25zdCBzY3JvbGxUb3AgPSB0YXJnZXRFbC5zY3JvbGxUb3A7XHJcbiAgICBpZiAoc2Nyb2xsVG9wICE9PSAwICYmIChzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgKyB0aGlzLmxvYWRGYWN0b3IgPj0gc2Nyb2xsSGVpZ2h0KSkge1xyXG4gICAgICB0aGlzLmxvYWRNb3JlLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbn1cclxuIl19