@alauda-fe/common
Version:
Alauda frontend team common codes.
37 lines • 4.8 kB
JavaScript
import { Injectable, ElementRef } from '@angular/core';
import { Subject, filter, map } from 'rxjs';
import * as i0 from "@angular/core";
export class VisibilityService {
constructor() {
this.observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const target = entry.target;
this.visibilityChangeSubject.next({
element: new ElementRef(target),
isVisible: entry.isIntersecting,
});
}
});
}, {
threshold: 0.1,
});
this.visibilityChangeSubject = new Subject();
}
observe(element) {
this.observer.observe(element.nativeElement);
return this.visibilityChangeSubject.pipe(filter(({ element: el }) => el.nativeElement === element.nativeElement), map(({ isVisible }) => isVisible));
}
unobserve(element) {
this.observer.unobserve(element.nativeElement);
}
static { this.ɵfac = function VisibilityService_Factory(t) { return new (t || VisibilityService)(); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: VisibilityService, factory: VisibilityService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VisibilityService, [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaWJpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2xhenktY29tcG9uZW50L3Zpc2liaWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3hELE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFJbUIsYUFBUSxHQUFHLElBQUksb0JBQW9CLENBQ2xELE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3pCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO29CQUMzQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO3dCQUNoQyxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUMvQixTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWM7cUJBQ2hDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQ0Q7WUFDRSxTQUFTLEVBQUUsR0FBRztTQUNmLENBQ0YsQ0FBQztRQUVlLDRCQUF1QixHQUduQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0tBYXBCO0lBWEMsT0FBTyxDQUFDLE9BQW1CO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQ3RDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFDdkUsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQW1CO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDO2tGQWpDVSxpQkFBaUI7dUVBQWpCLGlCQUFpQixXQUFqQixpQkFBaUIsbUJBRmhCLE1BQU07O2lGQUVQLGlCQUFpQjtjQUg3QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVmlzaWJpbGl0eVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgIGVudHJpZXMgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZW50cnkudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIHRoaXMudmlzaWJpbGl0eUNoYW5nZVN1YmplY3QubmV4dCh7XG4gICAgICAgICAgICBlbGVtZW50OiBuZXcgRWxlbWVudFJlZih0YXJnZXQpLFxuICAgICAgICAgICAgaXNWaXNpYmxlOiBlbnRyeS5pc0ludGVyc2VjdGluZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB7XG4gICAgICB0aHJlc2hvbGQ6IDAuMSxcbiAgICB9LFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdmlzaWJpbGl0eUNoYW5nZVN1YmplY3Q6IFN1YmplY3Q8e1xuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgaXNWaXNpYmxlOiBib29sZWFuO1xuICB9PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgb2JzZXJ2ZShlbGVtZW50OiBFbGVtZW50UmVmKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eUNoYW5nZVN1YmplY3QucGlwZShcbiAgICAgIGZpbHRlcigoeyBlbGVtZW50OiBlbCB9KSA9PiBlbC5uYXRpdmVFbGVtZW50ID09PSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgbWFwKCh7IGlzVmlzaWJsZSB9KSA9PiBpc1Zpc2libGUpLFxuICAgICk7XG4gIH1cblxuICB1bm9ic2VydmUoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMub2JzZXJ2ZXIudW5vYnNlcnZlKGVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gIH1cbn1cbiJdfQ==