@ciri/ngx-carousel
Version:
A simple angular carousel component.
126 lines • 9.52 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/carousel-item/carousel-item.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, Inject, ViewEncapsulation } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { LazyRenderDirective } from '../lazy-render.directive';
import { CAROUSEL, inRange } from '../../utils';
export class CarouselItemComponent {
/**
* @param {?} elRef
* @param {?} cdr
* @param {?} sanitizer
* @param {?} parent
*/
constructor(elRef, cdr, sanitizer, parent // 之所以不声明具体类型是因为会警告循环引用,虽然它并未发生
) {
this.elRef = elRef;
this.cdr = cdr;
this.sanitizer = sanitizer;
this.parent = parent;
this.rendered = false;
this.destroy$ = new Subject();
}
// 这种方式不兼容 ie11,废弃掉此方案
// @HostBinding('style')
// get style() {
// return this.sanitizer.bypassSecurityTrustStyle(`
// width: ${this.parent.width}px;
// `)
// }
/**
* @return {?}
*/
get isLazyRender() {
return !!this.lazyContent;
}
/**
* @return {?}
*/
get shouldRender() {
return !this.isLazyRender || this.rendered;
}
/**
* @return {?}
*/
ngOnInit() { }
/**
* @return {?}
*/
ngAfterViewInit() {
const { active$, cache, lazyRenderOffset: offset } = (/** @type {?} */ (this.parent));
active$.pipe(takeUntil(this.destroy$)).subscribe((/**
* @param {?} index
* @return {?}
*/
index => {
this.rendered =
(cache && this.rendered) || inRange(this.index, index - offset, index + offset);
this.cdr.markForCheck();
}));
}
/**
* @return {?}
*/
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
}
CarouselItemComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-carousel-item',
template: "<ng-container *ngIf=\"shouldRender\" [ngTemplateOutlet]=\"lazyContent && lazyContent.content\">\n <ng-content></ng-content>\n</ng-container>\n",
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
host: {
'[class.ngx-carousel__item]': `true`
},
styles: [".ngx-carousel__item{display:inline-block;vertical-align:top}.ngx-carousel__item.pre-mirror-node{position:absolute;left:0;transform:translateX(-100%)}.ngx-carousel__item.post-mirror-node{position:absolute;right:0;transform:translateX(100%)}"]
}] }
];
/** @nocollapse */
CarouselItemComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: ChangeDetectorRef },
{ type: DomSanitizer },
{ type: undefined, decorators: [{ type: Inject, args: [CAROUSEL,] }] }
];
CarouselItemComponent.propDecorators = {
lazyContent: [{ type: ContentChild, args: [LazyRenderDirective, { static: false },] }]
};
if (false) {
/** @type {?} */
CarouselItemComponent.prototype.lazyContent;
/** @type {?} */
CarouselItemComponent.prototype.index;
/** @type {?} */
CarouselItemComponent.prototype.rendered;
/**
* @type {?}
* @private
*/
CarouselItemComponent.prototype.destroy$;
/** @type {?} */
CarouselItemComponent.prototype.elRef;
/**
* @type {?}
* @private
*/
CarouselItemComponent.prototype.cdr;
/**
* @type {?}
* @private
*/
CarouselItemComponent.prototype.sanitizer;
/**
* @type {?}
* @private
*/
CarouselItemComponent.prototype.parent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2lyaS9uZ3gtY2Fyb3VzZWwvIiwic291cmNlcyI6WyJsaWIvY2Fyb3VzZWwtaXRlbS9jYXJvdXNlbC1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUVWLE1BQU0sRUFHTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBYS9DLE1BQU0sT0FBTyxxQkFBcUI7Ozs7Ozs7SUF3QmhDLFlBQ1MsS0FBaUIsRUFDaEIsR0FBc0IsRUFDdEIsU0FBdUIsRUFDTCxNQUFXLENBQUMsK0JBQStCOztRQUg5RCxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDTCxXQUFNLEdBQU4sTUFBTSxDQUFLO1FBeEJ2QyxhQUFRLEdBQUcsS0FBSyxDQUFBO1FBa0JSLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFBO0lBT2xDLENBQUM7Ozs7Ozs7Ozs7O0lBZkosSUFBSSxZQUFZO1FBQ2QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUMzQixDQUFDOzs7O0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUM1QyxDQUFDOzs7O0lBV0QsUUFBUSxLQUFJLENBQUM7Ozs7SUFFYixlQUFlO2NBQ1AsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxHQUFHLG1CQUFBLElBQUksQ0FBQyxNQUFNLEVBQXFCO1FBRXJGLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsUUFBUTtnQkFDWCxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUE7WUFDakYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUN6QixDQUFDLEVBQUMsQ0FBQTtJQUNKLENBQUM7Ozs7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzFCLENBQUM7OztZQXhERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsMkpBQTZDO2dCQUU3QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLElBQUksRUFBRTtvQkFDSiw0QkFBNEIsRUFBRSxNQUFNO2lCQUNyQzs7YUFDRjs7OztZQXZCQyxVQUFVO1lBSFYsaUJBQWlCO1lBVVYsWUFBWTs0Q0E2Q2hCLE1BQU0sU0FBQyxRQUFROzs7MEJBM0JqQixZQUFZLFNBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOzs7O0lBQXBELDRDQUFzRjs7SUFFdEYsc0NBQWE7O0lBQ2IseUNBQWdCOzs7OztJQWtCaEIseUNBQXFDOztJQUduQyxzQ0FBd0I7Ozs7O0lBQ3hCLG9DQUE4Qjs7Ozs7SUFDOUIsMENBQStCOzs7OztJQUMvQix1Q0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgTGF6eVJlbmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2xhenktcmVuZGVyLmRpcmVjdGl2ZSdcbmltcG9ydCB7IENBUk9VU0VMLCBpblJhbmdlIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBDYXJvdXNlbENvbXBvbmVudCB9IGZyb20gJy4uL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWNhcm91c2VsLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fyb3VzZWwtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhcm91c2VsLWl0ZW0uY29tcG9uZW50Lmxlc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm5neC1jYXJvdXNlbF9faXRlbV0nOiBgdHJ1ZWBcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGQoTGF6eVJlbmRlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pIGxhenlDb250ZW50OiBMYXp5UmVuZGVyRGlyZWN0aXZlXG5cbiAgaW5kZXg6IG51bWJlclxuICByZW5kZXJlZCA9IGZhbHNlXG5cbiAgLy8g6L+Z56eN5pa55byP5LiN5YW85a65IGllMTHvvIzlup/lvIPmjonmraTmlrnmoYhcbiAgLy8gQEhvc3RCaW5kaW5nKCdzdHlsZScpXG4gIC8vIGdldCBzdHlsZSgpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGBcbiAgLy8gICAgIHdpZHRoOiAke3RoaXMucGFyZW50LndpZHRofXB4O1xuICAvLyAgIGApXG4gIC8vIH1cblxuICBnZXQgaXNMYXp5UmVuZGVyKCkge1xuICAgIHJldHVybiAhIXRoaXMubGF6eUNvbnRlbnRcbiAgfVxuXG4gIGdldCBzaG91bGRSZW5kZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTGF6eVJlbmRlciB8fCB0aGlzLnJlbmRlcmVkXG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIEBJbmplY3QoQ0FST1VTRUwpIHByaXZhdGUgcGFyZW50OiBhbnkgLy8g5LmL5omA5Lul5LiN5aOw5piO5YW35L2T57G75Z6L5piv5Zug5Li65Lya6K2m5ZGK5b6q546v5byV55So77yM6Jm954S25a6D5bm25pyq5Y+R55SfXG4gICkge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHsgYWN0aXZlJCwgY2FjaGUsIGxhenlSZW5kZXJPZmZzZXQ6IG9mZnNldCB9ID0gdGhpcy5wYXJlbnQgYXMgQ2Fyb3VzZWxDb21wb25lbnRcblxuICAgIGFjdGl2ZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShpbmRleCA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVkID1cbiAgICAgICAgKGNhY2hlICYmIHRoaXMucmVuZGVyZWQpIHx8IGluUmFuZ2UodGhpcy5pbmRleCwgaW5kZXggLSBvZmZzZXQsIGluZGV4ICsgb2Zmc2V0KVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKClcbiAgICB9KVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KClcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKClcbiAgfVxufVxuIl19