UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

210 lines 17.4 kB
/** * @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'; export class AnchorLinkDirective { /** * @param {?} box */ constructor(box) { this.bindAnchorAfterBoxReady = (/** * @return {?} */ () => { if (this.boxElement.anchorMap) { setTimeout((/** * @return {?} */ () => { this.anchorBlock = this.boxElement.anchorMap[this.anchorName]; }), 0); } else { this.bindingAnchorTimer = setTimeout(this.bindAnchorAfterBoxReady, 500); } }); this.boxElement = box; } /** * @return {?} */ get anchorActiveClass() { return (this.anchorBlock && this.anchorBlock.isActive) ? (this.anchorActive || '') : ''; } /** * @param {?} anchor * @return {?} */ set anchorName(anchor) { this._anchorName = anchor; this.bindAnchorAfterBoxReady(); } /** * @return {?} */ get anchorName() { return this._anchorName; } /** * @return {?} */ ngOnInit() { this.subscribeAnchorMapChange(); } /** * @return {?} */ ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } /** * @return {?} */ subscribeAnchorMapChange() { if (this.boxElement) { this.subscription = this.boxElement.refreshAnchorMap.subscribe((/** * @return {?} */ () => { if (this.bindingAnchorTimer) { clearTimeout(this.bindingAnchorTimer); this.bindingAnchorTimer = undefined; } this.bindAnchorAfterBoxReady(); })); } } /** * @return {?} */ scrollToAnchor() { if (!this.anchorBlock) { return; } /** @type {?} */ const callback = (/** * @return {?} */ () => { setTimeout((/** * @return {?} */ () => { this.boxElement.forceActiveAnchor(this.anchorName, 'anchor-link'); }), 120); }); ((/** * @param {?} container * @param {?} anchor * @return {?} */ (container, anchor) => { /** @type {?} */ let 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 {?} */ scrollAnimate(target, currentTopValue, targetTopValue, timeGap = 40, scrollTime = 450, callback) { /** @type {?} */ const startTimeStamp = Date.now(); /** @type {?} */ const drawAnimateFrame = (/** * @return {?} */ () => { /** @type {?} */ const 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 {?} */ const tempTopValue = this.easeInOutCubic(currentTime, currentTopValue, targetTopValue, scrollTime); target.scrollTop = tempTopValue; if (target === document.documentElement) { document.body.scrollTop = tempTopValue; } setTimeout((/** * @return {?} */ () => { requestAnimationFrame(drawAnimateFrame); }), timeGap); } }); requestAnimationFrame(drawAnimateFrame); } /** * @param {?} t * @param {?} b * @param {?} c * @param {?} d * @return {?} */ easeInOutCubic(t, b, c, d) { /** @type {?} */ const cc = c - b; /** @type {?} */ let 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 = () => [ { type: AnchorBoxDirective, decorators: [{ type: Inject, args: [forwardRef((/** * @return {?} */ () => AnchorBoxDirective)),] }] } ]; AnchorLinkDirective.propDecorators = { anchorActiveClass: [{ type: HostBinding, args: ['class',] }], anchorName: [{ type: Input, args: ['dAnchorLink',] }], anchorActive: [{ type: Input }], scrollToAnchor: [{ type: HostListener, args: ['click',] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvYW5jaG9yLyIsInNvdXJjZXMiOlsiYW5jaG9yLWxpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUs1RCxNQUFNLE9BQU8sbUJBQW1COzs7O0lBbUI5QixZQUEwRCxHQUF1QjtRQTBCakYsNEJBQXVCOzs7UUFBRyxHQUFHLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtnQkFDN0IsVUFBVTs7O2dCQUFDLEdBQUcsRUFBRSxHQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3hGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3pFO1FBQ0gsQ0FBQyxFQUFBO1FBL0JHLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQzFCLENBQUM7Ozs7SUFwQkQsSUFBMEIsaUJBQWlCO1FBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFGLENBQUM7Ozs7O0lBRUQsSUFDSSxVQUFVLENBQUMsTUFB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O2dDQWxCdkQsV0FBVyxTQUFDLE9BQU87eUJBSW5CLEtBQUssU0FBQyxhQUFhOzJCQU9uQixLQUFLOzZCQXlDTCxZQUFZLFNBQUUsT0FBTzs7Ozs7OztJQWpEdEIsMENBQW9COztJQVFwQiwyQ0FBOEI7O0lBRTlCLHlDQUErQjs7SUFDL0IsMENBQTZCOztJQUM3QixpREFBbUI7O0lBQ25CLDJDQUFhOztJQTRCYixzREFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQW5jaG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9hbmNob3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQW5jaG9yQm94RGlyZWN0aXZlIH0gZnJvbSAnLi9hbmNob3ItYm94LmRpcmVjdGl2ZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tkQW5jaG9yTGlua10nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5jaG9yTGlua0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGFuY2hvckFjdGl2ZUNsYXNzKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLmFuY2hvckJsb2NrICYmIHRoaXMuYW5jaG9yQmxvY2suaXNBY3RpdmUpID8gKHRoaXMuYW5jaG9yQWN0aXZlIHx8ICcnKSA6ICcnO1xyXG4gIH1cclxuICBwcml2YXRlIF9hbmNob3JOYW1lO1xyXG4gIEBJbnB1dCgnZEFuY2hvckxpbmsnKVxyXG4gIHNldCBhbmNob3JOYW1lKGFuY2hvcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hbmNob3JOYW1lID0gYW5jaG9yO1xyXG4gICAgdGhpcy5iaW5kQW5jaG9yQWZ0ZXJCb3hSZWFkeSgpO1xyXG4gIH1cclxuICBnZXQgYW5jaG9yTmFtZSgpIHsgcmV0dXJuIHRoaXMuX2FuY2hvck5hbWU7IH1cclxuXHJcbiAgQElucHV0KCkgYW5jaG9yQWN0aXZlOiBzdHJpbmc7XHJcblxyXG4gIGJveEVsZW1lbnQ6IEFuY2hvckJveERpcmVjdGl2ZTtcclxuICBhbmNob3JCbG9jazogQW5jaG9yRGlyZWN0aXZlO1xyXG4gIGJpbmRpbmdBbmNob3JUaW1lcjtcclxuICBzdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBBbmNob3JCb3hEaXJlY3RpdmUpKSBib3g6IEFuY2hvckJveERpcmVjdGl2ZSkge1xyXG4gICAgICB0aGlzLmJveEVsZW1lbnQgPSBib3g7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVBbmNob3JNYXBDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgICBpZiAoIHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVBbmNob3JNYXBDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5ib3hFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ib3hFbGVtZW50LnJlZnJlc2hBbmNob3JNYXAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5iaW5kaW5nQW5jaG9yVGltZXIpIHtcclxuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJpbmRpbmdBbmNob3JUaW1lcik7XHJcbiAgICAgICAgICB0aGlzLmJpbmRpbmdBbmNob3JUaW1lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5iaW5kQW5jaG9yQWZ0ZXJCb3hSZWFkeSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJpbmRBbmNob3JBZnRlckJveFJlYWR5ID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuYm94RWxlbWVudC5hbmNob3JNYXApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7dGhpcy5hbmNob3JCbG9jayA9IHRoaXMuYm94RWxlbWVudC5hbmNob3JNYXBbdGhpcy5hbmNob3JOYW1lXTsgfSwgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJpbmRpbmdBbmNob3JUaW1lciA9IHNldFRpbWVvdXQodGhpcy5iaW5kQW5jaG9yQWZ0ZXJCb3hSZWFkeSwgNTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIgKCdjbGljaycpXHJcbiAgc2Nyb2xsVG9BbmNob3IoKSB7XHJcbiAgICBpZiAoICF0aGlzLmFuY2hvckJsb2NrKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5ib3hFbGVtZW50LmZvcmNlQWN0aXZlQW5jaG9yKHRoaXMuYW5jaG9yTmFtZSwgJ2FuY2hvci1saW5rJyk7IH0sIDEyMCk7XHJcbiAgICB9O1xyXG4gICAgKChjb250YWluZXI6IEVsZW1lbnQsIGFuY2hvcjogRWxlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgY29udGFpbmVyU2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgaWYgKGNvbnRhaW5lciA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XHJcbiAgICAgICAgY29udGFpbmVyU2Nyb2xsVG9wICs9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2Nyb2xsQW5pbWF0ZShcclxuICAgICAgICBjb250YWluZXIsXHJcbiAgICAgICAgY29udGFpbmVyU2Nyb2xsVG9wLFxyXG4gICAgICAgIChjb250YWluZXJTY3JvbGxUb3AgKyBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gKHRoaXMuYm94RWxlbWVudC52aWV3ICYmIHRoaXMuYm94RWxlbWVudC52aWV3LnRvcCB8fCAwKSksXHJcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNhbGxiYWNrXHJcbiAgICAgICk7XHJcbiAgICB9KSggdGhpcy5ib3hFbGVtZW50LnNjcm9sbFRhcmdldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuYW5jaG9yQmxvY2suZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxBbmltYXRlKHRhcmdldCwgY3VycmVudFRvcFZhbHVlLCB0YXJnZXRUb3BWYWx1ZSwgdGltZUdhcDogbnVtYmVyID0gNDAsIHNjcm9sbFRpbWU6IG51bWJlciA9IDQ1MCwgY2FsbGJhY2s/KSB7XHJcbiAgICBjb25zdCBzdGFydFRpbWVTdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICBjb25zdCBkcmF3QW5pbWF0ZUZyYW1lID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWVTdGFtcDtcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lIC0gdGltZUdhcCA+IHNjcm9sbFRpbWUgKSB7XHJcbiAgICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IHRhcmdldFRvcFZhbHVlO1xyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xyXG4gICAgICAgICAgLy8g5YW85a655YaZ5rOV77yM6ICB5rWP6KeI5ZmoL+iAgUFQSeaooeW8j+mcgOimgWRvY3VtZW50LmJvZHnmu5rliqjvvIzmlrDnmoTpnIDopoFkb2N1bWVudEVsZW1lbnTmu5rliqhcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gdGFyZ2V0VG9wVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB0ZW1wVG9wVmFsdWUgPSB0aGlzLmVhc2VJbk91dEN1YmljKGN1cnJlbnRUaW1lLCBjdXJyZW50VG9wVmFsdWUsIHRhcmdldFRvcFZhbHVlLCBzY3JvbGxUaW1lKTtcclxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gdGVtcFRvcFZhbHVlO1xyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSB0ZW1wVG9wVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3JlcXVlc3RBbmltYXRpb25GcmFtZShkcmF3QW5pbWF0ZUZyYW1lKTsgfSwgdGltZUdhcCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZHJhd0FuaW1hdGVGcmFtZSk7XHJcbiAgfVxyXG5cclxuICBlYXNlSW5PdXRDdWJpYyh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY2MgPSBjIC0gYjtcclxuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xyXG4gICAgaWYgKHR0IDwgMSkge1xyXG4gICAgICByZXR1cm4gY2MgLyAyICogdHQgKiB0dCAqIHR0ICsgYjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBjYyAvIDIgKiAoKHR0IC09IDIpICogdHQgKiB0dCArIDIpICsgYjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19