UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

221 lines 18 kB
/** * @fileoverview added by tsickle * Generated from: anchor.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, HostListener, Input } from '@angular/core'; import { ReplaySubject } from 'rxjs'; export class AnchorDirective { /** * @param {?} el */ constructor(el) { this.el = el; this.anchorActive = 'active'; this.activeChangeSubject = new ReplaySubject(1); this.REACH_TOP_VISION_OFFSET = 50; this.THROTTLE_DELAY = 100; this.THROTTLE_TRIGGER = 600; this.throttle = (/** * @return {?} */ () => { /** @type {?} */ const fn = this.checkActiveStatus; /** @type {?} */ const time = Date.now(); if (this.scrollTimer) { clearTimeout(this.scrollTimer); } if (!this.scrollPreStart) { this.scrollPreStart = time; } if (time - this.scrollPreStart > this.THROTTLE_TRIGGER) { fn(); this.scrollPreStart = null; this.scrollTimer = null; } else { this.scrollTimer = setTimeout((/** * @return {?} */ () => { fn(); this.scrollPreStart = null; this.scrollTimer = null; }), this.THROTTLE_DELAY); } }); this.checkActiveStatus = (/** * @param {?=} activeChangeBy * @return {?} */ (activeChangeBy) => { /** @type {?} */ const top = this.element.getBoundingClientRect().top - (this.boxElement.view && this.boxElement.view.top || 0); /** @type {?} */ const bottom = this.element.getBoundingClientRect().bottom - (this.boxElement.view && this.boxElement.view.top || 0); // 首个个特殊处理 if (this.anchor === this.boxElement.defaultAnchor) { this.activeChangeBy = activeChangeBy || 'scroll'; this.isActive = bottom > this.REACH_TOP_VISION_OFFSET ? true : false; return; } // 默认处理 this.activeChangeBy = activeChangeBy || 'scroll'; this.isActive = bottom > this.REACH_TOP_VISION_OFFSET && top < this.REACH_TOP_VISION_OFFSET ? true : false; }); this.element = this.el.nativeElement; } /** * @param {?} active * @return {?} */ set isActive(active) { this._isActive = active; this.activeChangeSubject.next(active); } /** * @return {?} */ get isActive() { return this._isActive; } /** * @param {?} box * @return {?} */ set boxElement(box) { this._boxElement = box; this.updateScrollListenTarget(); } /** * @return {?} */ get boxElement() { return this._boxElement; } /** * @return {?} */ ngAfterViewInit() { this.activeChangeSubscription = this.activeChangeSubject.asObservable().subscribe((/** * @param {?} active * @return {?} */ active => { if (this.lastActiveBy) { this.element.classList.remove(this.lastActiveBy); } if (active) { this.element.classList.add(this.anchorActive); this.lastActiveBy = 'anchor-active-by-' + this.activeChangeBy; // setTimeout是为了this.lastActiveBy每次都能被再次触发 setTimeout((/** * @return {?} */ () => { this.element.classList.add(this.lastActiveBy); }), 0); } else { this.element.classList.remove(this.anchorActive); } })); setTimeout((/** * @return {?} */ () => { this.checkActiveStatus('initial'); })); } /** * @return {?} */ ngOnDestroy() { this.scrollListenTarget.removeEventListener('scroll', this.throttle); if (this.activeChangeSubscription) { this.activeChangeSubscription.unsubscribe(); } } /** * @return {?} */ beFocused() { this.boxElement.forceActiveAnchor(this.anchor, 'click-inside'); } /** * @return {?} */ updateScrollListenTarget() { if (this.scrollListenTarget) { return; } if (this.boxElement) { this.scrollListenTarget = this.boxElement.scrollTarget || window; // window有scroll事件,document.documentElement没有scroll事件 } this.scrollListenTarget.addEventListener('scroll', this.throttle, { passive: true }); } } AnchorDirective.decorators = [ { type: Directive, args: [{ selector: '[dAnchor]' },] } ]; /** @nocollapse */ AnchorDirective.ctorParameters = () => [ { type: ElementRef } ]; AnchorDirective.propDecorators = { anchor: [{ type: Input, args: ['dAnchor',] }], anchorActive: [{ type: Input }], beFocused: [{ type: HostListener, args: ['click',] }] }; if (false) { /** @type {?} */ AnchorDirective.prototype.anchor; /** @type {?} */ AnchorDirective.prototype.anchorActive; /** @type {?} */ AnchorDirective.prototype._isActive; /** @type {?} */ AnchorDirective.prototype.activeChangeBy; /** @type {?} */ AnchorDirective.prototype.activeChangeSubscription; /** @type {?} */ AnchorDirective.prototype.activeChangeSubject; /** @type {?} */ AnchorDirective.prototype.lastActiveBy; /** @type {?} */ AnchorDirective.prototype.element; /** @type {?} */ AnchorDirective.prototype._boxElement; /** @type {?} */ AnchorDirective.prototype.scrollListenTarget; /** @type {?} */ AnchorDirective.prototype.REACH_TOP_VISION_OFFSET; /** * @type {?} * @private */ AnchorDirective.prototype.THROTTLE_DELAY; /** * @type {?} * @private */ AnchorDirective.prototype.THROTTLE_TRIGGER; /** * @type {?} * @private */ AnchorDirective.prototype.scrollPreStart; /** * @type {?} * @private */ AnchorDirective.prototype.scrollTimer; /** @type {?} */ AnchorDirective.prototype.throttle; /** @type {?} */ AnchorDirective.prototype.checkActiveStatus; /** * @type {?} * @private */ AnchorDirective.prototype.el; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL2FuY2hvci8iLCJzb3VyY2VzIjpbImFuY2hvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQU1uRCxNQUFNLE9BQU8sZUFBZTs7OztJQWdDMUIsWUFBb0IsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUE5QnpCLGlCQUFZLEdBQUcsUUFBUSxDQUFDO1FBV2pDLHdCQUFtQixHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBWTNDLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUVyQixtQkFBYyxHQUFHLEdBQUcsQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxHQUFHLENBQUM7UUFxQy9CLGFBQVE7OztRQUFHLEdBQUcsRUFBRTs7a0JBQ1IsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUI7O2tCQUMzQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7YUFDNUI7WUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdEQsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pC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Qzs7O1lBaEhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsV0FBVzthQUN0Qjs7OztZQU5rQyxVQUFVOzs7cUJBUTFDLEtBQUssU0FBQyxTQUFTOzJCQUNmLEtBQUs7d0JBMERMLFlBQVksU0FBQyxPQUFPOzs7O0lBM0RyQixpQ0FBaUM7O0lBQ2pDLHVDQUFpQzs7SUFDakMsb0NBQW1COztJQVFuQix5Q0FBeUM7O0lBQ3pDLG1EQUF1Qzs7SUFDdkMsOENBQTJDOztJQUMzQyx1Q0FBcUI7O0lBRXJCLGtDQUFxQjs7SUFDckIsc0NBQXdCOztJQU94Qiw2Q0FBcUM7O0lBQ3JDLGtEQUE2Qjs7Ozs7SUFFN0IseUNBQTZCOzs7OztJQUM3QiwyQ0FBK0I7Ozs7O0lBQy9CLHlDQUF1Qjs7Ozs7SUFDdkIsc0NBQW9COztJQW1DcEIsbUNBb0JDOztJQUVELDRDQWNDOzs7OztJQXJFVyw2QkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQW5jaG9yQWN0aXZlQ2hhbmdlU291cmNlLCBJQW5jaG9yQm94IH0gZnJvbSAnLi9hbmNob3IudHlwZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tkQW5jaG9yXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFuY2hvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCdkQW5jaG9yJykgYW5jaG9yOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYW5jaG9yQWN0aXZlID0gJ2FjdGl2ZSc7XHJcbiAgX2lzQWN0aXZlOiBib29sZWFuO1xyXG4gIHNldCBpc0FjdGl2ZShhY3RpdmU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzQWN0aXZlID0gYWN0aXZlO1xyXG4gICAgdGhpcy5hY3RpdmVDaGFuZ2VTdWJqZWN0Lm5leHQoYWN0aXZlKTtcclxuICB9XHJcbiAgZ2V0IGlzQWN0aXZlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlO1xyXG4gIH1cclxuICBhY3RpdmVDaGFuZ2VCeTogQW5jaG9yQWN0aXZlQ2hhbmdlU291cmNlO1xyXG4gIGFjdGl2ZUNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGFjdGl2ZUNoYW5nZVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcclxuICBsYXN0QWN0aXZlQnk6IHN0cmluZztcclxuXHJcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgX2JveEVsZW1lbnQ6IElBbmNob3JCb3g7XHJcbiAgc2V0IGJveEVsZW1lbnQoIGJveDogSUFuY2hvckJveCkge1xyXG4gICAgdGhpcy5fYm94RWxlbWVudCA9IGJveDtcclxuICAgIHRoaXMudXBkYXRlU2Nyb2xsTGlzdGVuVGFyZ2V0KCk7XHJcbiAgfVxyXG4gIGdldCBib3hFbGVtZW50KCkge3JldHVybiB0aGlzLl9ib3hFbGVtZW50OyB9XHJcblxyXG4gIHNjcm9sbExpc3RlblRhcmdldDogRWxlbWVudCB8IFdpbmRvdztcclxuICBSRUFDSF9UT1BfVklTSU9OX09GRlNFVCA9IDUwO1xyXG5cclxuICBwcml2YXRlIFRIUk9UVExFX0RFTEFZID0gMTAwO1xyXG4gIHByaXZhdGUgVEhST1RUTEVfVFJJR0dFUiA9IDYwMDtcclxuICBwcml2YXRlIHNjcm9sbFByZVN0YXJ0O1xyXG4gIHByaXZhdGUgc2Nyb2xsVGltZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuYWN0aXZlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5hY3RpdmVDaGFuZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShhY3RpdmUgPT4ge1xyXG4gICAgICBpZiAodGhpcy5sYXN0QWN0aXZlQnkpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmxhc3RBY3RpdmVCeSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuYW5jaG9yQWN0aXZlKTtcclxuICAgICAgICB0aGlzLmxhc3RBY3RpdmVCeSA9ICdhbmNob3ItYWN0aXZlLWJ5LScgKyB0aGlzLmFjdGl2ZUNoYW5nZUJ5O1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXTmmK/kuLrkuoZ0aGlzLmxhc3RBY3RpdmVCeeavj+asoemDveiDveiiq+WGjeasoeinpuWPkVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMubGFzdEFjdGl2ZUJ5KTsgfSwgMCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5hbmNob3JBY3RpdmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuY2hlY2tBY3RpdmVTdGF0dXMoJ2luaXRpYWwnKTsgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc2Nyb2xsTGlzdGVuVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMudGhyb3R0bGUpO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycpIC8vIOm8oOagh+iQveWFpeiMg+WbtO+8jOa/gOa0u2FuY2hvclxyXG4gIGJlRm9jdXNlZCgpIHtcclxuICAgIHRoaXMuYm94RWxlbWVudC5mb3JjZUFjdGl2ZUFuY2hvcih0aGlzLmFuY2hvciwgJ2NsaWNrLWluc2lkZScpO1xyXG4gIH1cclxuXHJcbiAgdGhyb3R0bGUgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBmbiA9IHRoaXMuY2hlY2tBY3RpdmVTdGF0dXM7XHJcbiAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcclxuICAgIGlmICh0aGlzLnNjcm9sbFRpbWVyKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRpbWVyKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zY3JvbGxQcmVTdGFydCkge1xyXG4gICAgICB0aGlzLnNjcm9sbFByZVN0YXJ0ID0gdGltZTtcclxuICAgIH1cclxuICAgIGlmICh0aW1lIC0gdGhpcy5zY3JvbGxQcmVTdGFydCA+IHRoaXMuVEhST1RUTEVfVFJJR0dFUikge1xyXG4gICAgICBmbigpO1xyXG4gICAgICB0aGlzLnNjcm9sbFByZVN0YXJ0ID0gbnVsbDtcclxuICAgICAgdGhpcy5zY3JvbGxUaW1lciA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNjcm9sbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgZm4oKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFByZVN0YXJ0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjcm9sbFRpbWVyID0gbnVsbDtcclxuICAgICAgfSwgdGhpcy5USFJPVFRMRV9ERUxBWSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0FjdGl2ZVN0YXR1cyA9IChhY3RpdmVDaGFuZ2VCeT86IEFuY2hvckFjdGl2ZUNoYW5nZVNvdXJjZSkgPT4ge1xyXG4gICAgY29uc3QgdG9wID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtICh0aGlzLmJveEVsZW1lbnQudmlldyAmJiB0aGlzLmJveEVsZW1lbnQudmlldy50b3AgfHwgMCk7XHJcbiAgICBjb25zdCBib3R0b20gPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIC0gKHRoaXMuYm94RWxlbWVudC52aWV3ICYmIHRoaXMuYm94RWxlbWVudC52aWV3LnRvcCB8fCAwKTtcclxuXHJcbiAgICAvLyDpppbkuKrkuKrnibnmrorlpITnkIZcclxuICAgIGlmICh0aGlzLmFuY2hvciA9PT0gdGhpcy5ib3hFbGVtZW50LmRlZmF1bHRBbmNob3IpIHtcclxuICAgICAgdGhpcy5hY3RpdmVDaGFuZ2VCeSA9IGFjdGl2ZUNoYW5nZUJ5IHx8ICdzY3JvbGwnO1xyXG4gICAgICB0aGlzLmlzQWN0aXZlID0gYm90dG9tID4gdGhpcy5SRUFDSF9UT1BfVklTSU9OX09GRlNFVCAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDpu5jorqTlpITnkIZcclxuICAgIHRoaXMuYWN0aXZlQ2hhbmdlQnkgPSBhY3RpdmVDaGFuZ2VCeSB8fCAnc2Nyb2xsJztcclxuICAgIHRoaXMuaXNBY3RpdmUgPSBib3R0b20gPiB0aGlzLlJFQUNIX1RPUF9WSVNJT05fT0ZGU0VUICAmJiB0b3AgPCB0aGlzLlJFQUNIX1RPUF9WSVNJT05fT0ZGU0VUID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2Nyb2xsTGlzdGVuVGFyZ2V0ICgpIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbExpc3RlblRhcmdldCkgeyByZXR1cm47IH1cclxuICAgIGlmICh0aGlzLmJveEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5UYXJnZXQgPSB0aGlzLmJveEVsZW1lbnQuc2Nyb2xsVGFyZ2V0IHx8IHdpbmRvdzsgLy8gd2luZG935pyJc2Nyb2xs5LqL5Lu277yMZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW505rKh5pyJc2Nyb2xs5LqL5Lu2XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjcm9sbExpc3RlblRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnRocm90dGxlLCB7cGFzc2l2ZTogdHJ1ZX0pO1xyXG4gIH1cclxufVxyXG4iXX0=