@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
251 lines • 19.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: anchor-link.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, forwardRef, HostListener, Inject, Input, HostBinding } from '@angular/core';
import { AnchorBoxDirective } from './anchor-box.directive';
var AnchorLinkDirective = /** @class */ (function () {
function AnchorLinkDirective(box) {
var _this = this;
this.bindAnchorAfterBoxReady = (/**
* @return {?}
*/
function () {
if (_this.boxElement.anchorMap) {
setTimeout((/**
* @return {?}
*/
function () { _this.anchorBlock = _this.boxElement.anchorMap[_this.anchorName]; }), 0);
}
else {
_this.bindingAnchorTimer = setTimeout(_this.bindAnchorAfterBoxReady, 500);
}
});
this.boxElement = box;
}
Object.defineProperty(AnchorLinkDirective.prototype, "anchorActiveClass", {
get: /**
* @return {?}
*/
function () {
return (this.anchorBlock && this.anchorBlock.isActive) ? (this.anchorActive || '') : '';
},
enumerable: true,
configurable: true
});
Object.defineProperty(AnchorLinkDirective.prototype, "anchorName", {
get: /**
* @return {?}
*/
function () { return this._anchorName; },
set: /**
* @param {?} anchor
* @return {?}
*/
function (anchor) {
this._anchorName = anchor;
this.bindAnchorAfterBoxReady();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
AnchorLinkDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.subscribeAnchorMapChange();
};
/**
* @return {?}
*/
AnchorLinkDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.subscription) {
this.subscription.unsubscribe();
}
};
/**
* @return {?}
*/
AnchorLinkDirective.prototype.subscribeAnchorMapChange = /**
* @return {?}
*/
function () {
var _this = this;
if (this.boxElement) {
this.subscription = this.boxElement.refreshAnchorMap.subscribe((/**
* @return {?}
*/
function () {
if (_this.bindingAnchorTimer) {
clearTimeout(_this.bindingAnchorTimer);
_this.bindingAnchorTimer = undefined;
}
_this.bindAnchorAfterBoxReady();
}));
}
};
/**
* @return {?}
*/
AnchorLinkDirective.prototype.scrollToAnchor = /**
* @return {?}
*/
function () {
var _this = this;
if (!this.anchorBlock) {
return;
}
/** @type {?} */
var callback = (/**
* @return {?}
*/
function () {
setTimeout((/**
* @return {?}
*/
function () { _this.boxElement.forceActiveAnchor(_this.anchorName, 'anchor-link'); }), 120);
});
((/**
* @param {?} container
* @param {?} anchor
* @return {?}
*/
function (container, anchor) {
/** @type {?} */
var containerScrollTop = container.scrollTop;
if (container === document.documentElement) {
containerScrollTop += document.body.scrollTop;
}
_this.scrollAnimate(container, containerScrollTop, (containerScrollTop + anchor.getBoundingClientRect().top - (_this.boxElement.view && _this.boxElement.view.top || 0)), undefined, undefined, callback);
}))(this.boxElement.scrollTarget || document.documentElement, this.anchorBlock.element);
};
/**
* @param {?} target
* @param {?} currentTopValue
* @param {?} targetTopValue
* @param {?=} timeGap
* @param {?=} scrollTime
* @param {?=} callback
* @return {?}
*/
AnchorLinkDirective.prototype.scrollAnimate = /**
* @param {?} target
* @param {?} currentTopValue
* @param {?} targetTopValue
* @param {?=} timeGap
* @param {?=} scrollTime
* @param {?=} callback
* @return {?}
*/
function (target, currentTopValue, targetTopValue, timeGap, scrollTime, callback) {
var _this = this;
if (timeGap === void 0) { timeGap = 40; }
if (scrollTime === void 0) { scrollTime = 450; }
/** @type {?} */
var startTimeStamp = Date.now();
/** @type {?} */
var drawAnimateFrame = (/**
* @return {?}
*/
function () {
/** @type {?} */
var currentTime = Date.now() - startTimeStamp;
if (currentTime - timeGap > scrollTime) {
target.scrollTop = targetTopValue;
if (target === document.documentElement) {
// 兼容写法,老浏览器/老API模式需要document.body滚动,新的需要documentElement滚动
document.body.scrollTop = targetTopValue;
}
if (callback) {
callback();
}
}
else {
/** @type {?} */
var tempTopValue = _this.easeInOutCubic(currentTime, currentTopValue, targetTopValue, scrollTime);
target.scrollTop = tempTopValue;
if (target === document.documentElement) {
document.body.scrollTop = tempTopValue;
}
setTimeout((/**
* @return {?}
*/
function () { requestAnimationFrame(drawAnimateFrame); }), timeGap);
}
});
requestAnimationFrame(drawAnimateFrame);
};
/**
* @param {?} t
* @param {?} b
* @param {?} c
* @param {?} d
* @return {?}
*/
AnchorLinkDirective.prototype.easeInOutCubic = /**
* @param {?} t
* @param {?} b
* @param {?} c
* @param {?} d
* @return {?}
*/
function (t, b, c, d) {
/** @type {?} */
var cc = c - b;
/** @type {?} */
var tt = t / (d / 2);
if (tt < 1) {
return cc / 2 * tt * tt * tt + b;
}
else {
return cc / 2 * ((tt -= 2) * tt * tt + 2) + b;
}
};
AnchorLinkDirective.decorators = [
{ type: Directive, args: [{
selector: '[dAnchorLink]',
},] }
];
/** @nocollapse */
AnchorLinkDirective.ctorParameters = function () { return [
{ type: AnchorBoxDirective, decorators: [{ type: Inject, args: [forwardRef((/**
* @return {?}
*/
function () { return AnchorBoxDirective; })),] }] }
]; };
AnchorLinkDirective.propDecorators = {
anchorActiveClass: [{ type: HostBinding, args: ['class',] }],
anchorName: [{ type: Input, args: ['dAnchorLink',] }],
anchorActive: [{ type: Input }],
scrollToAnchor: [{ type: HostListener, args: ['click',] }]
};
return AnchorLinkDirective;
}());
export { AnchorLinkDirective };
if (false) {
/**
* @type {?}
* @private
*/
AnchorLinkDirective.prototype._anchorName;
/** @type {?} */
AnchorLinkDirective.prototype.anchorActive;
/** @type {?} */
AnchorLinkDirective.prototype.boxElement;
/** @type {?} */
AnchorLinkDirective.prototype.anchorBlock;
/** @type {?} */
AnchorLinkDirective.prototype.bindingAnchorTimer;
/** @type {?} */
AnchorLinkDirective.prototype.subscription;
/** @type {?} */
AnchorLinkDirective.prototype.bindAnchorAfterBoxReady;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvYW5jaG9yLyIsInNvdXJjZXMiOlsiYW5jaG9yLWxpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RDtJQXNCRSw2QkFBMEQsR0FBdUI7UUFBakYsaUJBRUM7UUF3QkQsNEJBQXVCOzs7UUFBRztZQUN4QixJQUFJLEtBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFO2dCQUM3QixVQUFVOzs7Z0JBQUMsY0FBTyxLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQzthQUN4RjtpQkFBTTtnQkFDTCxLQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN6RTtRQUNILENBQUMsRUFBQTtRQS9CRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBcEJELHNCQUEwQixrREFBaUI7Ozs7UUFBM0M7WUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixDQUFDOzs7T0FBQTtJQUVELHNCQUNJLDJDQUFVOzs7O1FBSWQsY0FBbUIsT0FBTyxJQUFJLENB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a0IsdUJBd0JaLE1BQU0sU0FBQyxVQUFVOzs7d0JBQUMsY0FBTSxPQUFBLGtCQUFrQixFQUFsQixDQUFrQixFQUFDOzs7b0NBbEJ2RCxXQUFXLFNBQUMsT0FBTzs2QkFJbkIsS0FBSyxTQUFDLGFBQWE7K0JBT25CLEtBQUs7aUNBeUNMLFlBQVksU0FBRSxPQUFPOztJQXdEeEIsMEJBQUM7Q0FBQSxBQWhIRCxJQWdIQztTQTdHWSxtQkFBbUI7Ozs7OztJQUk5QiwwQ0FBb0I7O0lBUXBCLDJDQUE4Qjs7SUFFOUIseUNBQStCOztJQUMvQiwwQ0FBNkI7O0lBQzdCLGlEQUFtQjs7SUFDbkIsMkNBQWE7O0lBNEJiLHNEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBbmNob3JEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBbmNob3JCb3hEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci1ib3guZGlyZWN0aXZlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2RBbmNob3JMaW5rXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbmNob3JMaW5rRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgYW5jaG9yQWN0aXZlQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuYW5jaG9yQmxvY2sgJiYgdGhpcy5hbmNob3JCbG9jay5pc0FjdGl2ZSkgPyAodGhpcy5hbmNob3JBY3RpdmUgfHwgJycpIDogJyc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FuY2hvck5hbWU7XHJcbiAgQElucHV0KCdkQW5jaG9yTGluaycpXHJcbiAgc2V0IGFuY2hvck5hbWUoYW5jaG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FuY2hvck5hbWUgPSBhbmNob3I7XHJcbiAgICB0aGlzLmJpbmRBbmNob3JBZnRlckJveFJlYWR5KCk7XHJcbiAgfVxyXG4gIGdldCBhbmNob3JOYW1lKCkgeyByZXR1cm4gdGhpcy5fYW5jaG9yTmFtZTsgfVxyXG5cclxuICBASW5wdXQoKSBhbmNob3JBY3RpdmU6IHN0cmluZztcclxuXHJcbiAgYm94RWxlbWVudDogQW5jaG9yQm94RGlyZWN0aXZlO1xyXG4gIGFuY2hvckJsb2NrOiBBbmNob3JEaXJlY3RpdmU7XHJcbiAgYmluZGluZ0FuY2hvclRpbWVyO1xyXG4gIHN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChmb3J3YXJkUmVmKCgpID0+IEFuY2hvckJveERpcmVjdGl2ZSkpIGJveDogQW5jaG9yQm94RGlyZWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuYm94RWxlbWVudCA9IGJveDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZUFuY2hvck1hcENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgIGlmICggdGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIHN1YnNjcmliZUFuY2hvck1hcENoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmJveEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmJveEVsZW1lbnQucmVmcmVzaEFuY2hvck1hcC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdBbmNob3JUaW1lcikge1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmluZGluZ0FuY2hvclRpbWVyKTtcclxuICAgICAgICAgIHRoaXMuYmluZGluZ0FuY2hvclRpbWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJpbmRBbmNob3JBZnRlckJveFJlYWR5KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmluZEFuY2hvckFmdGVyQm94UmVhZHkgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5ib3hFbGVtZW50LmFuY2hvck1hcCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHt0aGlzLmFuY2hvckJsb2NrID0gdGhpcy5ib3hFbGVtZW50LmFuY2hvck1hcFt0aGlzLmFuY2hvck5hbWVdOyB9LCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmluZGluZ0FuY2hvclRpbWVyID0gc2V0VGltZW91dCh0aGlzLmJpbmRBbmNob3JBZnRlckJveFJlYWR5LCA1MDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lciAoJ2NsaWNrJylcclxuICBzY3JvbGxUb0FuY2hvcigpIHtcclxuICAgIGlmICggIXRoaXMuYW5jaG9yQmxvY2spIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmJveEVsZW1lbnQuZm9yY2VBY3RpdmVBbmNob3IodGhpcy5hbmNob3JOYW1lLCAnYW5jaG9yLWxpbmsnKTsgfSwgMTIwKTtcclxuICAgIH07XHJcbiAgICAoKGNvbnRhaW5lcjogRWxlbWVudCwgYW5jaG9yOiBFbGVtZW50KSA9PiB7XHJcbiAgICAgIGxldCBjb250YWluZXJTY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICBpZiAoY29udGFpbmVyID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcclxuICAgICAgICBjb250YWluZXJTY3JvbGxUb3AgKz0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zY3JvbGxBbmltYXRlKFxyXG4gICAgICAgIGNvbnRhaW5lcixcclxuICAgICAgICBjb250YWluZXJTY3JvbGxUb3AsXHJcbiAgICAgICAgKGNvbnRhaW5lclNjcm9sbFRvcCArIGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSAodGhpcy5ib3hFbGVtZW50LnZpZXcgJiYgdGhpcy5ib3hFbGVtZW50LnZpZXcudG9wIHx8IDApKSxcclxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY2FsbGJhY2tcclxuICAgICAgKTtcclxuICAgIH0pKCB0aGlzLmJveEVsZW1lbnQuc2Nyb2xsVGFyZ2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5hbmNob3JCbG9jay5lbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHNjcm9sbEFuaW1hdGUodGFyZ2V0LCBjdXJyZW50VG9wVmFsdWUsIHRhcmdldFRvcFZhbHVlLCB0aW1lR2FwOiBudW1iZXIgPSA0MCwgc2Nyb2xsVGltZTogbnVtYmVyID0gNDUwLCBjYWxsYmFjaz8pIHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZVN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IGRyYXdBbmltYXRlRnJhbWUgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZVN0YW1wO1xyXG4gICAgICBpZiAoY3VycmVudFRpbWUgLSB0aW1lR2FwID4gc2Nyb2xsVGltZSApIHtcclxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gdGFyZ2V0VG9wVmFsdWU7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAvLyDlhbzlrrnlhpnms5XvvIzogIHmtY/op4jlmagv6ICBQVBJ5qih5byP6ZyA6KaBZG9jdW1lbnQuYm9keea7muWKqO+8jOaWsOeahOmcgOimgWRvY3VtZW50RWxlbWVudOa7muWKqFxyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSB0YXJnZXRUb3BWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHRlbXBUb3BWYWx1ZSA9IHRoaXMuZWFzZUluT3V0Q3ViaWMoY3VycmVudFRpbWUsIGN1cnJlbnRUb3BWYWx1ZSwgdGFyZ2V0VG9wVmFsdWUsIHNjcm9sbFRpbWUpO1xyXG4gICAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSB0ZW1wVG9wVmFsdWU7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IHRlbXBUb3BWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRyYXdBbmltYXRlRnJhbWUpOyB9LCB0aW1lR2FwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShkcmF3QW5pbWF0ZUZyYW1lKTtcclxuICB9XHJcblxyXG4gIGVhc2VJbk91dEN1YmljKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBjYyA9IGMgLSBiO1xyXG4gICAgbGV0IHR0ID0gdCAvIChkIC8gMik7XHJcbiAgICBpZiAodHQgPCAxKSB7XHJcbiAgICAgIHJldHVybiBjYyAvIDIgKiB0dCAqIHR0ICogdHQgKyBiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGNjIC8gMiAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=