@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
242 lines • 18.9 kB
JavaScript
/**
* @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';
var AnchorDirective = /** @class */ (function () {
function AnchorDirective(el) {
var _this = this;
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 {?}
*/
function () {
/** @type {?} */
var fn = _this.checkActiveStatus;
/** @type {?} */
var 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 {?}
*/
function () {
fn();
_this.scrollPreStart = null;
_this.scrollTimer = null;
}), _this.THROTTLE_DELAY);
}
});
this.checkActiveStatus = (/**
* @param {?=} activeChangeBy
* @return {?}
*/
function (activeChangeBy) {
/** @type {?} */
var top = _this.element.getBoundingClientRect().top - (_this.boxElement.view && _this.boxElement.view.top || 0);
/** @type {?} */
var 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;
}
Object.defineProperty(AnchorDirective.prototype, "isActive", {
get: /**
* @return {?}
*/
function () {
return this._isActive;
},
set: /**
* @param {?} active
* @return {?}
*/
function (active) {
this._isActive = active;
this.activeChangeSubject.next(active);
},
enumerable: true,
configurable: true
});
Object.defineProperty(AnchorDirective.prototype, "boxElement", {
get: /**
* @return {?}
*/
function () { return this._boxElement; },
set: /**
* @param {?} box
* @return {?}
*/
function (box) {
this._boxElement = box;
this.updateScrollListenTarget();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
AnchorDirective.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
this.activeChangeSubscription = this.activeChangeSubject.asObservable().subscribe((/**
* @param {?} active
* @return {?}
*/
function (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 {?}
*/
function () { _this.element.classList.add(_this.lastActiveBy); }), 0);
}
else {
_this.element.classList.remove(_this.anchorActive);
}
}));
setTimeout((/**
* @return {?}
*/
function () { _this.checkActiveStatus('initial'); }));
};
/**
* @return {?}
*/
AnchorDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.scrollListenTarget.removeEventListener('scroll', this.throttle);
if (this.activeChangeSubscription) {
this.activeChangeSubscription.unsubscribe();
}
};
/**
* @return {?}
*/
AnchorDirective.prototype.beFocused = /**
* @return {?}
*/
function () {
this.boxElement.forceActiveAnchor(this.anchor, 'click-inside');
};
/**
* @return {?}
*/
AnchorDirective.prototype.updateScrollListenTarget = /**
* @return {?}
*/
function () {
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 = function () { return [
{ type: ElementRef }
]; };
AnchorDirective.propDecorators = {
anchor: [{ type: Input, args: ['dAnchor',] }],
anchorActive: [{ type: Input }],
beFocused: [{ type: HostListener, args: ['click',] }]
};
return AnchorDirective;
}());
export { AnchorDirective };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL2FuY2hvci8iLCJzb3VyY2VzIjpbImFuY2hvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUduRDtJQW1DRSx5QkFBb0IsRUFBYztRQUFsQyxpQkFFQztRQUZtQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBOUJ6QixpQkFBWSxHQUFHLFFBQVEsQ0FBQztRQVdqQyx3QkFBbUIsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQVkzQyw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFFckIsbUJBQWMsR0FBRyxHQUFHLENBQUM7UUFDckIscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBcUMvQixhQUFROzs7UUFBRzs7Z0JBQ0gsRUFBRSxHQUFHLEtBQUksQ0FBQyxpQkFBaUI7O2dCQUMzQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN2QixJQUFJLEtBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLFlBQVksQ0FBQyxLQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsS0FBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEIsS0FBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7YUFDNUI7WUFDRCxJQUFJLElBQUksR0FBRyxLQUFJLENBQUMsY0FBYyxHQUFHLEtBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdEQsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsS0FBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLEtB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RixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7aUJBQ3RCOzs7O2dCQU5rQyxVQUFVOzs7eUJBUTFDLEtBQUssU0FBQyxTQUFTOytCQUNmLEtBQUs7NEJBMERMLFlBQVksU0FBQyxPQUFPOztJQWtEdkIsc0JBQUM7Q0FBQSxBQWpIRCxJQWlIQztTQTlHWSxlQUFlOzs7SUFDMUIsaUNBQWlDOztJQUNqQyx1Q0FBaUM7O0lBQ2pDLG9DQUFtQjs7SUFRbkIseUNBQXlDOztJQUN6QyxtREFBdUM7O0lBQ3ZDLDhDQUEyQzs7SUFDM0MsdUNBQXFCOztJQUVyQixrQ0FBcUI7O0lBQ3JCLHNDQUF3Qjs7SUFPeEIsNkNBQXFDOztJQUNyQyxrREFBNkI7Ozs7O0lBRTdCLHlDQUE2Qjs7Ozs7SUFDN0IsMkNBQStCOzs7OztJQUMvQix5Q0FBdUI7Ozs7O0lBQ3ZCLHNDQUFvQjs7SUFtQ3BCLG1DQW9CQzs7SUFFRCw0Q0FjQzs7Ozs7SUFyRVcsNkJBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFuY2hvckFjdGl2ZUNoYW5nZVNvdXJjZSwgSUFuY2hvckJveCB9IGZyb20gJy4vYW5jaG9yLnR5cGUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZEFuY2hvcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbmNob3JEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgnZEFuY2hvcicpIGFuY2hvcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFuY2hvckFjdGl2ZSA9ICdhY3RpdmUnO1xyXG4gIF9pc0FjdGl2ZTogYm9vbGVhbjtcclxuICBzZXQgaXNBY3RpdmUoYWN0aXZlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGFjdGl2ZTtcclxuICAgIHRoaXMuYWN0aXZlQ2hhbmdlU3ViamVjdC5uZXh0KGFjdGl2ZSk7XHJcbiAgfVxyXG4gIGdldCBpc0FjdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTtcclxuICB9XHJcbiAgYWN0aXZlQ2hhbmdlQnk6IEFuY2hvckFjdGl2ZUNoYW5nZVNvdXJjZTtcclxuICBhY3RpdmVDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBhY3RpdmVDaGFuZ2VTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XHJcbiAgbGFzdEFjdGl2ZUJ5OiBzdHJpbmc7XHJcblxyXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gIF9ib3hFbGVtZW50OiBJQW5jaG9yQm94O1xyXG4gIHNldCBib3hFbGVtZW50KCBib3g6IElBbmNob3JCb3gpIHtcclxuICAgIHRoaXMuX2JveEVsZW1lbnQgPSBib3g7XHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbExpc3RlblRhcmdldCgpO1xyXG4gIH1cclxuICBnZXQgYm94RWxlbWVudCgpIHtyZXR1cm4gdGhpcy5fYm94RWxlbWVudDsgfVxyXG5cclxuICBzY3JvbGxMaXN0ZW5UYXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3c7XHJcbiAgUkVBQ0hfVE9QX1ZJU0lPTl9PRkZTRVQgPSA1MDtcclxuXHJcbiAgcHJpdmF0ZSBUSFJPVFRMRV9ERUxBWSA9IDEwMDtcclxuICBwcml2YXRlIFRIUk9UVExFX1RSSUdHRVIgPSA2MDA7XHJcbiAgcHJpdmF0ZSBzY3JvbGxQcmVTdGFydDtcclxuICBwcml2YXRlIHNjcm9sbFRpbWVyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZlQ2hhbmdlU3ViamVjdC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgaWYgKHRoaXMubGFzdEFjdGl2ZUJ5KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5sYXN0QWN0aXZlQnkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmFuY2hvckFjdGl2ZSk7XHJcbiAgICAgICAgdGhpcy5sYXN0QWN0aXZlQnkgPSAnYW5jaG9yLWFjdGl2ZS1ieS0nICsgdGhpcy5hY3RpdmVDaGFuZ2VCeTtcclxuICAgICAgICAvLyBzZXRUaW1lb3V05piv5Li65LqGdGhpcy5sYXN0QWN0aXZlQnnmr4/mrKHpg73og73ooqvlho3mrKHop6blj5FcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHt0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmxhc3RBY3RpdmVCeSk7IH0sIDApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuYW5jaG9yQWN0aXZlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHt0aGlzLmNoZWNrQWN0aXZlU3RhdHVzKCdpbml0aWFsJyk7IH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnNjcm9sbExpc3RlblRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnRocm90dGxlKTtcclxuICAgIGlmICh0aGlzLmFjdGl2ZUNoYW5nZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmFjdGl2ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKSAvLyDpvKDmoIfokL3lhaXojIPlm7TvvIzmv4DmtLthbmNob3JcclxuICBiZUZvY3VzZWQoKSB7XHJcbiAgICB0aGlzLmJveEVsZW1lbnQuZm9yY2VBY3RpdmVBbmNob3IodGhpcy5hbmNob3IsICdjbGljay1pbnNpZGUnKTtcclxuICB9XHJcblxyXG4gIHRocm90dGxlID0gKCkgPT4ge1xyXG4gICAgY29uc3QgZm4gPSB0aGlzLmNoZWNrQWN0aXZlU3RhdHVzO1xyXG4gICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XHJcbiAgICBpZiAodGhpcy5zY3JvbGxUaW1lcikge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lcik7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuc2Nyb2xsUHJlU3RhcnQpIHtcclxuICAgICAgdGhpcy5zY3JvbGxQcmVTdGFydCA9IHRpbWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGltZSAtIHRoaXMuc2Nyb2xsUHJlU3RhcnQgPiB0aGlzLlRIUk9UVExFX1RSSUdHRVIpIHtcclxuICAgICAgZm4oKTtcclxuICAgICAgdGhpcy5zY3JvbGxQcmVTdGFydCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVGltZXIgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGZuKCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxQcmVTdGFydCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUaW1lciA9IG51bGw7XHJcbiAgICAgIH0sIHRoaXMuVEhST1RUTEVfREVMQVkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tBY3RpdmVTdGF0dXMgPSAoYWN0aXZlQ2hhbmdlQnk/OiBBbmNob3JBY3RpdmVDaGFuZ2VTb3VyY2UpID0+IHtcclxuICAgIGNvbnN0IHRvcCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSAodGhpcy5ib3hFbGVtZW50LnZpZXcgJiYgdGhpcy5ib3hFbGVtZW50LnZpZXcudG9wIHx8IDApO1xyXG4gICAgY29uc3QgYm90dG9tID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtICh0aGlzLmJveEVsZW1lbnQudmlldyAmJiB0aGlzLmJveEVsZW1lbnQudmlldy50b3AgfHwgMCk7XHJcblxyXG4gICAgLy8g6aaW5Liq5Liq54m55q6K5aSE55CGXHJcbiAgICBpZiAodGhpcy5hbmNob3IgPT09IHRoaXMuYm94RWxlbWVudC5kZWZhdWx0QW5jaG9yKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlQnkgPSBhY3RpdmVDaGFuZ2VCeSB8fCAnc2Nyb2xsJztcclxuICAgICAgdGhpcy5pc0FjdGl2ZSA9IGJvdHRvbSA+IHRoaXMuUkVBQ0hfVE9QX1ZJU0lPTl9PRkZTRVQgID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6buY6K6k5aSE55CGXHJcbiAgICB0aGlzLmFjdGl2ZUNoYW5nZUJ5ID0gYWN0aXZlQ2hhbmdlQnkgfHwgJ3Njcm9sbCc7XHJcbiAgICB0aGlzLmlzQWN0aXZlID0gYm90dG9tID4gdGhpcy5SRUFDSF9UT1BfVklTSU9OX09GRlNFVCAgJiYgdG9wIDwgdGhpcy5SRUFDSF9UT1BfVklTSU9OX09GRlNFVCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNjcm9sbExpc3RlblRhcmdldCAoKSB7XHJcbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5UYXJnZXQpIHsgcmV0dXJuOyB9XHJcbiAgICBpZiAodGhpcy5ib3hFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuVGFyZ2V0ID0gdGhpcy5ib3hFbGVtZW50LnNjcm9sbFRhcmdldCB8fCB3aW5kb3c7IC8vIHdpbmRvd+aciXNjcm9sbOS6i+S7tu+8jGRvY3VtZW50LmRvY3VtZW50RWxlbWVudOayoeaciXNjcm9sbOS6i+S7tlxyXG4gICAgfVxyXG4gICAgdGhpcy5zY3JvbGxMaXN0ZW5UYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy50aHJvdHRsZSwge3Bhc3NpdmU6IHRydWV9KTtcclxuICB9XHJcbn1cclxuIl19