@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
221 lines • 18 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';
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=