@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
95 lines • 7.27 kB
JavaScript
/**
* @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