UNPKG

ng-cw-v12

Version:

Angular UI component library

164 lines 18.8 kB
import { Component, Input } from '@angular/core'; import { animate, style, transition, trigger, state } from '@angular/animations'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class FlipTextComponent { constructor(elementRef) { this.elementRef = elementRef; /** 展示的文本内容 */ this._text = ''; /** 每个字符动画持续时间 */ this.ncDuration = 500; /** 每个字符之间的延迟 */ this.ncDelayMultiple = 80; /** 每个字符之间的间距 */ this.ncGap = 0; /** 延迟 */ this.ncDelay = 0; /** 是否在视图可见时才开始动画 */ this._startOnView = false; /** 是否只执行一次动画 */ this._once = false; this.characters = []; this.observer = null; this.timeout = null; } set ncText(value) { this._text = value; setTimeout(() => { this.start(); }); } get ncText() { return this._text; } set ncStartOnView(val) { this._startOnView = val !== null && val !== undefined && val !== false && val !== 'false'; } get ncStartOnView() { return this._startOnView; } set ncOnce(val) { this._once = val !== null && val !== undefined && val !== false && val !== 'false'; } get ncOnce() { return this._once; } ngOnInit() { } ngOnDestroy() { this.clear(); } start() { this.clear(); if (!this.ncStartOnView) { this.processText(); this.timeout = setTimeout(() => { this.startAnimation(); }, this.ncDelay); } else { this.setupIntersectionObserver(); } } clear() { if (this.observer) { this.observer.disconnect(); } if (this.timeout) { clearTimeout(this.timeout); } } setupIntersectionObserver() { this.observer = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { this.processText(); this.timeout = setTimeout(() => { this.startAnimation(); }, this.ncDelay); if (this.ncOnce) { if (this.observer) { this.observer.disconnect(); } } } else if (!this.ncOnce) { this.endAnimation(); } }, { threshold: 0.1 }); this.observer.observe(this.elementRef.nativeElement); } processText() { this.characters = this.ncText.split('').map((char, i) => ({ char, state: 'hidden', delay: i * this.ncDelayMultiple })); } startAnimation() { this.characters.forEach(char => { char.state = 'visible'; }); } endAnimation() { //若存在ncDelay,离开视图后,startAnimation可能还未执行,则需要清除timeout if (this.timeout) { clearTimeout(this.timeout); } //隐藏显示的文本 this.characters.forEach(char => { char.state = 'hidden'; }); } } FlipTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: FlipTextComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); FlipTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: FlipTextComponent, selector: "nc-flip-text", inputs: { ncText: "ncText", ncDuration: "ncDuration", ncDelayMultiple: "ncDelayMultiple", ncGap: "ncGap", ncDelay: "ncDelay", ncStartOnView: "ncStartOnView", ncOnce: "ncOnce" }, ngImport: i0, template: "<div class=\"flip-text-container gap-x\" style=\"--gap: {{ncGap}}px;\">\r\n <ng-container *ngFor=\"let char of characters; let i = index\">\r\n <span [@flipState]=\"{value: char.state, params: {duration: ncDuration, delay: char.delay}}\"\r\n class=\"origin-center drop-shadow-sm flip-span\" [innerHTML]=\"char.char === ' ' ? '&nbsp;' : char.char\"></span>\r\n </ng-container>\r\n</div>", styles: [":host{display:block}.flip-text-container{width:-moz-fit-content;width:fit-content}.gap-x>*+*{margin-left:var(--gap)}.origin-center{transform-origin:center}.drop-shadow-sm{filter:drop-shadow(0 1px 1px rgba(0,0,0,.05))}.flip-span{display:inline-block;transform-origin:center center;perspective:1000px}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [ trigger('flipState', [ state('hidden', style({ transform: 'rotateX(-90deg) scaleY(0)', opacity: 0 })), state('visible', style({ transform: 'rotateX(0) scaleY(1)', opacity: 1 })), transition('hidden => visible', animate('{{duration}}ms {{delay}}ms cubic-bezier(0.33, 1, 0.68, 1)')), transition('visible => hidden', animate('{{duration}}ms')) ]) ] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: FlipTextComponent, decorators: [{ type: Component, args: [{ selector: 'nc-flip-text', templateUrl: './flip-text.component.html', styleUrls: ['./flip-text.component.less'], animations: [ trigger('flipState', [ state('hidden', style({ transform: 'rotateX(-90deg) scaleY(0)', opacity: 0 })), state('visible', style({ transform: 'rotateX(0) scaleY(1)', opacity: 1 })), transition('hidden => visible', animate('{{duration}}ms {{delay}}ms cubic-bezier(0.33, 1, 0.68, 1)')), transition('visible => hidden', animate('{{duration}}ms')) ]) ] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { ncText: [{ type: Input }], ncDuration: [{ type: Input }], ncDelayMultiple: [{ type: Input }], ncGap: [{ type: Input }], ncDelay: [{ type: Input }], ncStartOnView: [{ type: Input }], ncOnce: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpcC10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvZmxpcC10ZXh0L2ZsaXAtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2ZsaXAtdGV4dC9mbGlwLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQXFCakYsTUFBTSxPQUFPLGlCQUFpQjtJQTRDNUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTNDMUMsY0FBYztRQUNOLFVBQUssR0FBVyxFQUFFLENBQUM7UUFXM0IsaUJBQWlCO1FBQ1IsZUFBVSxHQUFXLEdBQUcsQ0FBQztRQUNsQyxnQkFBZ0I7UUFDUCxvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUN0QyxnQkFBZ0I7UUFDUCxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLFNBQVM7UUFDQSxZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLG9CQUFvQjtRQUNaLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBUXRDLGdCQUFnQjtRQUNSLFVBQUssR0FBWSxLQUFLLENBQUM7UUFTL0IsZUFBVSxHQUFxRCxFQUFFLENBQUM7UUFDMUQsYUFBUSxHQUFnQyxJQUFJLENBQUM7UUFDN0MsWUFBTyxHQUFRLElBQUksQ0FBQztJQUVrQixDQUFDO0lBekMvQyxJQUNJLE1BQU0sQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FB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QUUsQ0FBQyw0QkFBNEIsQ0FBQztvQkFDekMsVUFBVSxFQUFFO3dCQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7NEJBQ25CLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsMkJBQTJCO2dDQUN0QyxPQUFPLEVBQUUsQ0FBQzs2QkFDWCxDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7Z0NBQ3JCLFNBQVMsRUFBRSxzQkFBc0I7Z0NBQ2pDLE9BQU8sRUFBRSxDQUFDOzZCQUNYLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7NEJBQ3JHLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt5QkFDM0QsQ0FBQztxQkFDSDtpQkFDRjtpR0FLSyxNQUFNO3NCQURULEtBQUs7Z0JBV0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUYsYUFBYTtzQkFEaEIsS0FBSztnQkFVRixNQUFNO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciwgc3RhdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmMtZmxpcC10ZXh0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmxpcC10ZXh0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mbGlwLXRleHQuY29tcG9uZW50Lmxlc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdmbGlwU3RhdGUnLCBbXHJcbiAgICAgIHN0YXRlKCdoaWRkZW4nLCBzdHlsZSh7XHJcbiAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlWCgtOTBkZWcpIHNjYWxlWSgwKScsXHJcbiAgICAgICAgb3BhY2l0eTogMFxyXG4gICAgICB9KSksXHJcbiAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoe1xyXG4gICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZVgoMCkgc2NhbGVZKDEpJyxcclxuICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignaGlkZGVuID0+IHZpc2libGUnLCBhbmltYXRlKCd7e2R1cmF0aW9ufX1tcyB7e2RlbGF5fX1tcyBjdWJpYy1iZXppZXIoMC4zMywgMSwgMC42OCwgMSknKSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gaGlkZGVuJywgYW5pbWF0ZSgne3tkdXJhdGlvbn19bXMnKSlcclxuICAgIF0pXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxpcFRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqIOWxleekuueahOaWh+acrOWGheWuuSAqL1xyXG4gIHByaXZhdGUgX3RleHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG5jVGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdGFydCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldCBuY1RleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gIH1cclxuICAvKiog5q+P5Liq5a2X56ym5Yqo55S75oyB57ut5pe26Ze0ICovXHJcbiAgQElucHV0KCkgbmNEdXJhdGlvbjogbnVtYmVyID0gNTAwO1xyXG4gIC8qKiDmr4/kuKrlrZfnrKbkuYvpl7TnmoTlu7bov58gKi9cclxuICBASW5wdXQoKSBuY0RlbGF5TXVsdGlwbGU6IG51bWJlciA9IDgwO1xyXG4gIC8qKiDmr4/kuKrlrZfnrKbkuYvpl7TnmoTpl7Tot50gKi9cclxuICBASW5wdXQoKSBuY0dhcDogbnVtYmVyID0gMDtcclxuICAvKiog5bu26L+fICovXHJcbiAgQElucHV0KCkgbmNEZWxheTogbnVtYmVyID0gMDtcclxuICAvKiog5piv5ZCm5Zyo6KeG5Zu+5Y+v6KeB5pe25omN5byA5aeL5Yqo55S7ICovXHJcbiAgcHJpdmF0ZSBfc3RhcnRPblZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBuY1N0YXJ0T25WaWV3KHZhbDogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgdGhpcy5fc3RhcnRPblZpZXcgPSB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBmYWxzZSAmJiB2YWwgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIGdldCBuY1N0YXJ0T25WaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0T25WaWV3O1xyXG4gIH1cclxuICAvKiog5piv5ZCm5Y+q5omn6KGM5LiA5qyh5Yqo55S7ICovXHJcbiAgcHJpdmF0ZSBfb25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG5jT25jZSh2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuX29uY2UgPSB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBmYWxzZSAmJiB2YWwgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIGdldCBuY09uY2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25jZTtcclxuICB9XHJcbiAgXHJcbiAgY2hhcmFjdGVyczogeyBjaGFyOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcsIGRlbGF5OiBudW1iZXIgfVtdID0gW107XHJcbiAgcHJpdmF0ZSBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHRpbWVvdXQ6IGFueSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGlmICghdGhpcy5uY1N0YXJ0T25WaWV3KSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc1RleHQoKTtcclxuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGFydEFuaW1hdGlvbigpO1xyXG4gICAgICB9LCB0aGlzLm5jRGVsYXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xyXG4gICAgICBpZiAoZW50cmllc1swXS5pc0ludGVyc2VjdGluZykge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1RleHQoKTtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcclxuICAgICAgICB9LCB0aGlzLm5jRGVsYXkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5uY09uY2UpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5uY09uY2UpIHtcclxuICAgICAgICB0aGlzLmVuZEFuaW1hdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc1RleHQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYXJhY3RlcnMgPSB0aGlzLm5jVGV4dC5zcGxpdCgnJykubWFwKChjaGFyOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gKHtcclxuICAgICAgY2hhcixcclxuICAgICAgc3RhdGU6ICdoaWRkZW4nLFxyXG4gICAgICBkZWxheTogaSAqIHRoaXMubmNEZWxheU11bHRpcGxlXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0QW5pbWF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFyYWN0ZXJzLmZvckVhY2goY2hhciA9PiB7XHJcbiAgICAgIGNoYXIuc3RhdGUgPSAndmlzaWJsZSc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW5kQW5pbWF0aW9uKCk6IHZvaWQge1xyXG4gICAgLy/oi6XlrZjlnKhuY0RlbGF577yM56a75byA6KeG5Zu+5ZCO77yMc3RhcnRBbmltYXRpb27lj6/og73ov5jmnKrmiafooYzvvIzliJnpnIDopoHmuIXpmaR0aW1lb3V0XHJcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xyXG4gICAgfVxyXG4gICAgLy/pmpDol4/mmL7npLrnmoTmlofmnKxcclxuICAgIHRoaXMuY2hhcmFjdGVycy5mb3JFYWNoKGNoYXIgPT4ge1xyXG4gICAgICBjaGFyLnN0YXRlID0gJ2hpZGRlbic7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsaXAtdGV4dC1jb250YWluZXIgZ2FwLXhcIiBzdHlsZT1cIi0tZ2FwOiB7e25jR2FwfX1weDtcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoYXIgb2YgY2hhcmFjdGVyczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgIDxzcGFuIFtAZmxpcFN0YXRlXT1cInt2YWx1ZTogY2hhci5zdGF0ZSwgcGFyYW1zOiB7ZHVyYXRpb246IG5jRHVyYXRpb24sIGRlbGF5OiBjaGFyLmRlbGF5fX1cIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm9yaWdpbi1jZW50ZXIgZHJvcC1zaGFkb3ctc20gZmxpcC1zcGFuXCIgW2lubmVySFRNTF09XCJjaGFyLmNoYXIgPT09ICcgJyA/ICcmbmJzcDsnIDogY2hhci5jaGFyXCI+PC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==