UNPKG

ng-cw-v12

Version:

Angular UI component library

126 lines 16.8 kB
import { Directive, Input, Output, EventEmitter } from '@angular/core'; import * as i0 from "@angular/core"; export class PulsatingDirective { constructor(el, renderer) { this.el = el; this.renderer = renderer; this.ncDuration = 1500; // 一次动画时长,ms this.ncColor = '#0096ff'; // 默认浅蓝色光晕 this.ncSize = '8px'; // 最大光晕宽度 this.ncStopTime = 0; // 停止动画时间,ms,0表示不停止 this.ncEnabled = true; // 是否启用脉冲动画 this.ncEnabledChange = new EventEmitter(); // 双向绑定输出事件 this.shouldStop = false; this.isInitialized = false; // 为每个实例生成唯一的动画名称 this.animationName = `ncPulse_${Math.random().toString(36).substring(2, 11)}`; } ngOnInit() { this.createPulsatingContainer(); this.isInitialized = true; if (this.ncEnabled) { this.startAnimation(); } } ngOnChanges(changes) { if (this.isInitialized && changes['ncEnabled']) { if (this.ncEnabled) { this.startAnimation(); } else { this.stopAnimation(); } } } ngOnDestroy() { if (this.stopTimer) { clearTimeout(this.stopTimer); } } createPulsatingContainer() { this.pulsatingContainer = this.renderer.createElement('div'); this.renderer.addClass(this.pulsatingContainer, 'pulsating-container'); // 设置基础样式 this.renderer.setStyle(this.pulsatingContainer, 'position', 'absolute'); this.renderer.setStyle(this.pulsatingContainer, 'inset', '0'); this.renderer.setStyle(this.pulsatingContainer, 'borderRadius', 'inherit'); this.renderer.setStyle(this.pulsatingContainer, 'pointerEvents', 'none'); this.renderer.setStyle(this.pulsatingContainer, 'zIndex', '-1'); const elementPosition = this.el.nativeElement.style.position; if (!elementPosition || elementPosition === 'static') { this.renderer.setStyle(this.el.nativeElement, 'position', 'relative'); } // 添加关键帧动画样式 this.styleElement = this.renderer.createElement('style'); const keyframes = ` @keyframes ${this.animationName} { 0% { box-shadow: 0 0 0 0 ${this.ncColor}; } 50% { box-shadow: 0 0 0 ${this.ncSize} ${this.ncColor}; opacity: 0.5; } 100% { box-shadow: 0 0 0 0 ${this.ncColor}; } } `; this.renderer.appendChild(this.styleElement, this.renderer.createText(keyframes)); this.renderer.appendChild(this.el.nativeElement, this.styleElement); // 将容器添加到宿主元素中 this.renderer.appendChild(this.el.nativeElement, this.pulsatingContainer); // 监听动画迭代事件,用于平滑停止 this.renderer.listen(this.pulsatingContainer, 'animationiteration', () => { if (this.shouldStop) { this.renderer.setStyle(this.pulsatingContainer, 'animation', 'none'); this.shouldStop = false; } }); } startAnimation() { if (!this.pulsatingContainer) return; this.shouldStop = false; this.renderer.setStyle(this.pulsatingContainer, 'animation', `${this.animationName} ${this.ncDuration}ms ease-in-out infinite`); // 如果设置了停止时间,则在指定时间后标记需要停止 if (this.ncStopTime > 0) { this.stopTimer = setTimeout(() => { this.stopAnimation(); // 当因为 ncStopTime 停止动画时,更新 ncEnabled 值并发出事件 this.ncEnabled = false; this.ncEnabledChange.emit(false); }, this.ncStopTime); } } stopAnimation() { if (!this.pulsatingContainer) return; if (this.stopTimer) { clearTimeout(this.stopTimer); this.stopTimer = null; } this.shouldStop = true; } } PulsatingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: PulsatingDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); PulsatingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.5", type: PulsatingDirective, selector: "[ncPulsating]", inputs: { ncDuration: "ncDuration", ncColor: "ncColor", ncSize: "ncSize", ncStopTime: "ncStopTime", ncEnabled: "ncEnabled" }, outputs: { ncEnabledChange: "ncEnabledChange" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: PulsatingDirective, decorators: [{ type: Directive, args: [{ selector: '[ncPulsating]' }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { ncDuration: [{ type: Input }], ncColor: [{ type: Input }], ncSize: [{ type: Input }], ncStopTime: [{ type: Input }], ncEnabled: [{ type: Input }], ncEnabledChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVsc2F0aW5nLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvcHVsc2F0aW5nL3B1bHNhdGluZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQStDLE1BQU0sZUFBZSxDQUFDOztBQUszSSxNQUFNLE9BQU8sa0JBQWtCO0lBZTdCLFlBQW9CLEVBQWMsRUFBVSxRQUFtQjtRQUEzQyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWR0RCxlQUFVLEdBQVcsSUFBSSxDQUFDLENBQUMsWUFBWTtRQUN2QyxZQUFPLEdBQVcsU0FBUyxDQUFDLENBQUMsVUFBVTtRQUN2QyxXQUFNLEdBQVcsS0FBSyxDQUFDLENBQUMsU0FBUztRQUNqQyxlQUFVLEdBQVcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1FBQzNDLGNBQVMsR0FBWSxJQUFJLENBQUMsQ0FBQyxXQUFXO1FBQ3JDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQyxDQUFDLFdBQVc7UUFJNUQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUc1QixpQkFBaUI7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUs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O21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO2lCQUMxQjt5SEFFVSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tuY1B1bHNhdGluZ10nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdWxzYXRpbmdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBuY0R1cmF0aW9uOiBudW1iZXIgPSAxNTAwOyAvLyDkuIDmrKHliqjnlLvml7bplb/vvIxtc1xyXG4gIEBJbnB1dCgpIG5jQ29sb3I6IHN0cmluZyA9ICcjMDA5NmZmJzsgLy8g6buY6K6k5rWF6JOd6Imy5YWJ5pmVXHJcbiAgQElucHV0KCkgbmNTaXplOiBzdHJpbmcgPSAnOHB4JzsgLy8g5pyA5aSn5YWJ5pmV5a695bqmXHJcbiAgQElucHV0KCkgbmNTdG9wVGltZTogbnVtYmVyID0gMDsgLy8g5YGc5q2i5Yqo55S75pe26Ze077yMbXPvvIww6KGo56S65LiN5YGc5q2iXHJcbiAgQElucHV0KCkgbmNFbmFibGVkOiBib29sZWFuID0gdHJ1ZTsgLy8g5piv5ZCm5ZCv55So6ISJ5Yay5Yqo55S7XHJcbiAgQE91dHB1dCgpIG5jRW5hYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTsgLy8g5Y+M5ZCR57uR5a6a6L6T5Ye65LqL5Lu2XHJcblxyXG4gIHByaXZhdGUgcHVsc2F0aW5nQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBhbmltYXRpb25OYW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzaG91bGRTdG9wID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdG9wVGltZXI6IGFueTtcclxuICBwcml2YXRlIHN0eWxlRWxlbWVudCE6IEhUTUxFbGVtZW50O1xyXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcclxuICAgIC8vIOS4uuavj+S4quWunuS+i+eUn+aIkOWUr+S4gOeahOWKqOeUu+WQjeensFxyXG4gICAgdGhpcy5hbmltYXRpb25OYW1lID0gYG5jUHVsc2VfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpfWA7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlUHVsc2F0aW5nQ29udGFpbmVyKCk7XHJcbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMubmNFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgY2hhbmdlc1snbmNFbmFibGVkJ10pIHtcclxuICAgICAgaWYgKHRoaXMubmNFbmFibGVkKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydEFuaW1hdGlvbigpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN0b3BUaW1lcikge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdG9wVGltZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQdWxzYXRpbmdDb250YWluZXIoKSB7XHJcbiAgICB0aGlzLnB1bHNhdGluZ0NvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMucHVsc2F0aW5nQ29udGFpbmVyLCAncHVsc2F0aW5nLWNvbnRhaW5lcicpO1xyXG4gICAgLy8g6K6+572u5Z+656GA5qC35byPXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucHVsc2F0aW5nQ29udGFpbmVyLCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5wdWxzYXRpbmdDb250YWluZXIsICdpbnNldCcsICcwJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucHVsc2F0aW5nQ29udGFpbmVyLCAnYm9yZGVyUmFkaXVzJywgJ2luaGVyaXQnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5wdWxzYXRpbmdDb250YWluZXIsICdwb2ludGVyRXZlbnRzJywgJ25vbmUnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5wdWxzYXRpbmdDb250YWluZXIsICd6SW5kZXgnLCAnLTEnKTtcclxuXHJcbiAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUucG9zaXRpb247XHJcbiAgICBpZiAoIWVsZW1lbnRQb3NpdGlvbiB8fCBlbGVtZW50UG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDmt7vliqDlhbPplK7luKfliqjnlLvmoLflvI9cclxuICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgY29uc3Qga2V5ZnJhbWVzID0gYFxyXG4gICAgICBAa2V5ZnJhbWVzICR7dGhpcy5hbmltYXRpb25OYW1lfSB7XHJcbiAgICAgICAgMCUge1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMCAke3RoaXMubmNDb2xvcn07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDUwJSB7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAke3RoaXMubmNTaXplfSAke3RoaXMubmNDb2xvcn07XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDEwMCUge1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMCAke3RoaXMubmNDb2xvcn07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBgO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLnN0eWxlRWxlbWVudCwgdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KGtleWZyYW1lcykpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuc3R5bGVFbGVtZW50KTtcclxuXHJcbiAgICAvLyDlsIblrrnlmajmt7vliqDliLDlrr/kuLvlhYPntKDkuK1cclxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLnB1bHNhdGluZ0NvbnRhaW5lcik7XHJcblxyXG4gICAgLy8g55uR5ZCs5Yqo55S76L+t5Luj5LqL5Lu277yM55So5LqO5bmz5ruR5YGc5q2iXHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLnB1bHNhdGluZ0NvbnRhaW5lciwgJ2FuaW1hdGlvbml0ZXJhdGlvbicsICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvdWxkU3RvcCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5wdWxzYXRpbmdDb250YWluZXIsICdhbmltYXRpb24nLCAnbm9uZScpO1xyXG4gICAgICAgIHRoaXMuc2hvdWxkU3RvcCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRBbmltYXRpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMucHVsc2F0aW5nQ29udGFpbmVyKSByZXR1cm47XHJcbiAgICBcclxuICAgIHRoaXMuc2hvdWxkU3RvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnB1bHNhdGluZ0NvbnRhaW5lciwgJ2FuaW1hdGlvbicsXHJcbiAgICAgIGAke3RoaXMuYW5pbWF0aW9uTmFtZX0gJHt0aGlzLm5jRHVyYXRpb259bXMgZWFzZS1pbi1vdXQgaW5maW5pdGVgKTtcclxuXHJcbiAgICAvLyDlpoLmnpzorr7nva7kuoblgZzmraLml7bpl7TvvIzliJnlnKjmjIflrprml7bpl7TlkI7moIforrDpnIDopoHlgZzmraJcclxuICAgIGlmICh0aGlzLm5jU3RvcFRpbWUgPiAwKSB7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XHJcbiAgICAgICAgLy8g5b2T5Zug5Li6IG5jU3RvcFRpbWUg5YGc5q2i5Yqo55S75pe277yM5pu05pawIG5jRW5hYmxlZCDlgLzlubblj5Hlh7rkuovku7ZcclxuICAgICAgICB0aGlzLm5jRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmNFbmFibGVkQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgICB9LCB0aGlzLm5jU3RvcFRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wQW5pbWF0aW9uKCkge1xyXG4gICAgaWYgKCF0aGlzLnB1bHNhdGluZ0NvbnRhaW5lcikgcmV0dXJuO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5zdG9wVGltZXIpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RvcFRpbWVyKTtcclxuICAgICAgdGhpcy5zdG9wVGltZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLnNob3VsZFN0b3AgPSB0cnVlO1xyXG4gIH1cclxufSJdfQ==