UNPKG

ng-cw-v12

Version:

Angular UI component library

106 lines 15.6 kB
import { Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; export class ScrollListComponent { constructor(eleRef, cdr) { this.eleRef = eleRef; this.cdr = cdr; this.ncTime = 1; //多少秒滚动一格 this.pauseMode = false; } set ncPause(value) { this.pauseMode = value !== null && value !== undefined && value !== false && value !== 'false'; } ngAfterViewInit() { this.initializeScrollList(); this.setupMutationObserver(); } initializeScrollList() { var _a; const scoll = this.eleRef.nativeElement.querySelector('.scroll'); // 清空现有内容 while (scoll.childNodes.length > 1) { scoll.removeChild(scoll.lastChild); } // 克隆并添加新内容 const clone = (_a = scoll.firstElementChild) === null || _a === void 0 ? void 0 : _a.cloneNode(true); if (clone) { scoll.appendChild(clone); } const scollList = this.eleRef.nativeElement.querySelectorAll('.scroll-list'); let eleCount = scollList[0].childElementCount; // 重置动画 scollList.forEach(element => { element.style.animation = 'none'; element.offsetHeight; // 触发重排 element.style.animation = `scroll calc(${this.ncTime} * ${eleCount} * 1s) linear infinite`; }); if (this.pauseMode) { // 移除旧的事件监听器 if (this.mouseenterHandler) { scoll.removeEventListener('mouseenter', this.mouseenterHandler); } if (this.mouseleaveHandler) { scoll.removeEventListener('mouseleave', this.mouseleaveHandler); } // 创建新的事件处理函数 this.mouseenterHandler = () => { scollList[0].style.animationPlayState = 'paused'; scollList[1].style.animationPlayState = 'paused'; }; this.mouseleaveHandler = () => { scollList[0].style.animationPlayState = 'running'; scollList[1].style.animationPlayState = 'running'; }; // 添加新的事件监听器 scoll.addEventListener('mouseenter', this.mouseenterHandler); scoll.addEventListener('mouseleave', this.mouseleaveHandler); //mouseleave:仅在鼠标指针离开被选元素时触发,不会因为鼠标移动到任何子元素上而触发;不会向上冒泡到父元素。 //mouseout:会在鼠标指针离开被选元素或其任何子元素时触发;会冒泡到父元素,如果父元素上绑定了mouseout事件监听器,那么鼠标在子元素上移动也可能触发该监听器。 } this.cdr.detectChanges(); } setupMutationObserver() { const list = this.eleRef.nativeElement.querySelector('#scroll-container'); if (!list) return; this.observer = new MutationObserver(() => { // console.log('数据发生变化'); this.initializeScrollList(); }); this.observer.observe(list, { // childList: true,//该项开启后非常卡顿,initializeCarousel会一直执行 subtree: true, characterData: true }); } ngOnDestroy() { // 在组件销毁时清理事件监听器 const scoll = this.eleRef.nativeElement.querySelector('.scroll'); if (scoll) { if (this.mouseenterHandler) { scoll.removeEventListener('mouseenter', this.mouseenterHandler); } if (this.mouseleaveHandler) { scoll.removeEventListener('mouseleave', this.mouseleaveHandler); } } if (this.observer) { this.observer.disconnect(); } } } ScrollListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: ScrollListComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); ScrollListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: ScrollListComponent, selector: "nc-scroll-list", inputs: { ncTime: "ncTime", ncPause: "ncPause" }, ngImport: i0, template: "<div class=\"scroll\" id=\"scroll-container\">\r\n <div class=\"scroll-list\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>", styles: [".scroll{width:100%;height:100%;overflow:hidden}@keyframes scroll{0%{transform:translateY(0)}to{transform:translateY(-100%)}}\n"] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: ScrollListComponent, decorators: [{ type: Component, args: [{ selector: 'nc-scroll-list', templateUrl: './scroll-list.component.html', styleUrls: ['./scroll-list.component.less'] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { ncTime: [{ type: Input }], ncPause: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zY3JvbGwtbGlzdC9zY3JvbGwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3Njcm9sbC1saXN0L3Njcm9sbC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUErQyxNQUFNLGVBQWUsQ0FBQzs7QUFPMUcsTUFBTSxPQUFPLG1CQUFtQjtJQVU5QixZQUFvQixNQUFrQixFQUFVLEdBQXNCO1FBQWxELFdBQU0sR0FBTixNQUFNLENBQVk7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVQ3RCxXQUFNLEdBQVcsQ0FBQyxDQUFDLENBQUEsU0FBUztRQUlyQyxjQUFTLEdBQVksS0FBSyxDQUFDO0lBSytDLENBQUM7SUFSM0UsSUFBYSxPQUFPLENBQUMsS0FBdUI7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUssT0FBTyxDQUFDO0lBQ2pHLENBQUM7SUFRRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLG9CQUFvQjs7UUFDMUIsTUFBTSxLQUFLLEdBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5RSxTQUFTO1FBQ1QsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBVSxDQUFDLENB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LGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUUsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDMUIsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUNqRTtZQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQixLQUFLLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7O2dIQXBHVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix3R0NQaEMsZ0pBSU07MkZER08sbUJBQW1CO2tCQUwvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFdBQVcsRUFBRSw4QkFBOEI7b0JBQzNDLFNBQVMsRUFBRSxDQUFDLDhCQUE4QixDQUFDO2lCQUM1QztpSUFFVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ08sT0FBTztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmMtc2Nyb2xsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zY3JvbGwtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2Nyb2xsLWxpc3QuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Nyb2xsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgbmNUaW1lOiBudW1iZXIgPSAxOy8v5aSa5bCR56eS5rua5Yqo5LiA5qC8XHJcbiAgQElucHV0KCkgc2V0IG5jUGF1c2UodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMucGF1c2VNb2RlID0gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIHBhdXNlTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgb2JzZXJ2ZXIhOiBNdXRhdGlvbk9ic2VydmVyO1xyXG4gIHByaXZhdGUgbW91c2VlbnRlckhhbmRsZXI/OiAoKSA9PiB2b2lkO1xyXG4gIHByaXZhdGUgbW91c2VsZWF2ZUhhbmRsZXI/OiAoKSA9PiB2b2lkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZVJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsaXplU2Nyb2xsTGlzdCgpO1xyXG4gICAgdGhpcy5zZXR1cE11dGF0aW9uT2JzZXJ2ZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVNjcm9sbExpc3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzY29sbDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zY3JvbGwnKTtcclxuXHJcbiAgICAvLyDmuIXnqbrnjrDmnInlhoXlrrlcclxuICAgIHdoaWxlIChzY29sbC5jaGlsZE5vZGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgc2NvbGwucmVtb3ZlQ2hpbGQoc2NvbGwubGFzdENoaWxkISk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5YWL6ZqG5bm25re75Yqg5paw5YaF5a65XHJcbiAgICBjb25zdCBjbG9uZSA9IHNjb2xsLmZpcnN0RWxlbWVudENoaWxkPy5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICBpZiAoY2xvbmUpIHtcclxuICAgICAgc2NvbGwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjb2xsTGlzdDogQXJyYXk8SFRNTEVsZW1lbnQ+ID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2Nyb2xsLWxpc3QnKTtcclxuICAgIGxldCBlbGVDb3VudCA9IHNjb2xsTGlzdFswXS5jaGlsZEVsZW1lbnRDb3VudDtcclxuXHJcbiAgICAvLyDph43nva7liqjnlLtcclxuICAgIHNjb2xsTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmFuaW1hdGlvbiA9ICdub25lJztcclxuICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7IC8vIOinpuWPkemHjeaOklxyXG4gICAgICBlbGVtZW50LnN0eWxlLmFuaW1hdGlvbiA9IGBzY3JvbGwgY2FsYygke3RoaXMubmNUaW1lfSAqICR7ZWxlQ291bnR9ICogMXMpIGxpbmVhciBpbmZpbml0ZWA7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5wYXVzZU1vZGUpIHtcclxuICAgICAgLy8g56e76Zmk5pen55qE5LqL5Lu255uR5ZCs5ZmoXHJcbiAgICAgIGlmICh0aGlzLm1vdXNlZW50ZXJIYW5kbGVyKSB7XHJcbiAgICAgICAgc2NvbGwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMubW91c2VlbnRlckhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1vdXNlbGVhdmVIYW5kbGVyKSB7XHJcbiAgICAgICAgc2NvbGwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMubW91c2VsZWF2ZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDliJvlu7rmlrDnmoTkuovku7blpITnkIblh73mlbBcclxuICAgICAgdGhpcy5tb3VzZWVudGVySGFuZGxlciA9ICgpID0+IHtcclxuICAgICAgICBzY29sbExpc3RbMF0uc3R5bGUuYW5pbWF0aW9uUGxheVN0YXRlID0gJ3BhdXNlZCc7XHJcbiAgICAgICAgc2NvbGxMaXN0WzFdLnN0eWxlLmFuaW1hdGlvblBsYXlTdGF0ZSA9ICdwYXVzZWQnO1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLm1vdXNlbGVhdmVIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgIHNjb2xsTGlzdFswXS5zdHlsZS5hbmltYXRpb25QbGF5U3RhdGUgPSAncnVubmluZyc7XHJcbiAgICAgICAgc2NvbGxMaXN0WzFdLnN0eWxlLmFuaW1hdGlvblBsYXlTdGF0ZSA9ICdydW5uaW5nJztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIOa3u+WKoOaWsOeahOS6i+S7tuebkeWQrOWZqFxyXG4gICAgICBzY29sbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5tb3VzZWVudGVySGFuZGxlcik7XHJcbiAgICAgIHNjb2xsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLm1vdXNlbGVhdmVIYW5kbGVyKTtcclxuICAgICAgLy9tb3VzZWxlYXZl77ya5LuF5Zyo6byg5qCH5oyH6ZKI56a75byA6KKr6YCJ5YWD57Sg5pe26Kem5Y+R77yM5LiN5Lya5Zug5Li66byg5qCH56e75Yqo5Yiw5Lu75L2V5a2Q5YWD57Sg5LiK6ICM6Kem5Y+R77yb5LiN5Lya5ZCR5LiK5YaS5rOh5Yiw54i25YWD57Sg44CCXHJcbiAgICAgIC8vbW91c2VvdXTvvJrkvJrlnKjpvKDmoIfmjIfpkojnprvlvIDooqvpgInlhYPntKDmiJblhbbku7vkvZXlrZDlhYPntKDml7bop6blj5HvvJvkvJrlhpLms6HliLDniLblhYPntKDvvIzlpoLmnpzniLblhYPntKDkuIrnu5HlrprkuoZtb3VzZW91dOS6i+S7tuebkeWQrOWZqO+8jOmCo+S5iOm8oOagh+WcqOWtkOWFg+e0oOS4iuenu+WKqOS5n+WPr+iDveinpuWPkeivpeebkeWQrOWZqOOAglxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBNdXRhdGlvbk9ic2VydmVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGlzdDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGwtY29udGFpbmVyJyk7XHJcbiAgICBpZiAoIWxpc3QpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygn5pWw5o2u5Y+R55Sf5Y+Y5YyWJyk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVNjcm9sbExpc3QoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShsaXN0LCB7XHJcbiAgICAgIC8vIGNoaWxkTGlzdDogdHJ1ZSwvL+ivpemhueW8gOWQr+WQjumdnuW4uOWNoemhv++8jGluaXRpYWxpemVDYXJvdXNlbOS8muS4gOebtOaJp+ihjFxyXG4gICAgICBzdWJ0cmVlOiB0cnVlLFxyXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8g5Zyo57uE5Lu26ZSA5q+B5pe25riF55CG5LqL5Lu255uR5ZCs5ZmoXHJcbiAgICBjb25zdCBzY29sbDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zY3JvbGwnKTtcclxuICAgIGlmIChzY29sbCkge1xyXG4gICAgICBpZiAodGhpcy5tb3VzZWVudGVySGFuZGxlcikge1xyXG4gICAgICAgIHNjb2xsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLm1vdXNlZW50ZXJIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5tb3VzZWxlYXZlSGFuZGxlcikge1xyXG4gICAgICAgIHNjb2xsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLm1vdXNlbGVhdmVIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzY3JvbGxcIiBpZD1cInNjcm9sbC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtbGlzdFwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=