import { Component, ViewChild, ElementRef, QueryList, Renderer2, ChangeDetectorRef, ContentChild, Input } from '@angular/core';
import { UILazyloadDirective } from '../directives/ui-lazy-load.directive';
import { UiCarouselColorConfig } from '../color-config.class';
@Component({
// tslint:disable-next-line:component-selector
selector: 'cre-carousel-item',
template: `
`,
styles: [`
:host {
display:block!important;
}
.ui-carousel-item{
user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
-ms-user-select: none;
}
.transition{
transition: transform;
-moz-transition: transform;
-webkit-transition: transform;
-o-transition: transform;
-ms-transition: transform;
transition-timing-function: ease;
-moz-transition-timing-function: ease;
-o-transition-timing-function: ease;
-ms-transition-timing-function: ease;
}
.ui-carousel-item{
// height: 100%;
width: 100%;
position: absolute;
overflow: hidden;
}
.fade{
opacity: 1;
-webkit-transition: opacity .5s ease-in;
-moz-transition: opacity .5s ease-in;
-ms-transition: opacity .5s ease-in;
-o-transition: opacity .5s ease-in;
transition: opacity .5s ease-in;
}
.fade-out{
opacity: 0;
}
`]
})
export class UiCarouselItemComponent {
@ViewChild('carouselItem') public el: ElementRef;
@ContentChild(UILazyloadDirective) lazyLoadedImages: QueryList;
@Input() public backgroundColor: string;
public speed: number;
public currentPosition = 0;
public position = 0;
public zIndex: number;
public colorConfig = new UiCarouselColorConfig();
constructor(private renderer: Renderer2, private ref: ChangeDetectorRef) { }
public moveTo(position: number) {
this.renderer.setStyle(this.el.nativeElement, 'transform', 'translate3d(' + position + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-webkit-transform', 'translate3d(' + position + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-moz-transform', 'translate3d(' + position + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-o-transform', 'translate3d(' + position + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-ms-transform', 'translate3d(' + position + 'px, 0px, 0px)');
}
public moveBy(distance: number) {
this.renderer.setStyle(this.el.nativeElement, 'transform', 'translate3d(' + distance + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-webkit-transform', 'translate3d(' + distance + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-moz-transform', 'translate3d(' + distance + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-o-transform', 'translate3d(' + distance + 'px, 0px, 0px)');
this.renderer.setStyle(this.el.nativeElement, '-ms-transform', 'translate3d(' + distance + 'px, 0px, 0px)');
}
public setzIndex(zIndex: number) {
this.renderer.setStyle(this.el.nativeElement, 'z-index', zIndex);
}
public disableTransition() {
this.renderer.setStyle(this.el.nativeElement, 'transition', 'none');
this.renderer.setStyle(this.el.nativeElement, '-moz-transition', 'none');
this.renderer.setStyle(this.el.nativeElement, '-webkit-transition', 'none');
this.renderer.setStyle(this.el.nativeElement, '-o-transition', 'none');
this.renderer.setStyle(this.el.nativeElement, '-ms-transition', 'none');
}
public enableTransition() {
this.renderer.setStyle(this.el.nativeElement, 'transition', 'transform');
this.renderer.setStyle(this.el.nativeElement, '-moz-transition', 'transform');
this.renderer.setStyle(this.el.nativeElement, '-webkit-transition', 'transform');
this.renderer.setStyle(this.el.nativeElement, '-o-transition', 'transform');
this.renderer.setStyle(this.el.nativeElement, '-ms-transition', 'transform');
this.renderer.setStyle(this.el.nativeElement, 'transition-duration', this.speed + 'ms');
this.renderer.setStyle(this.el.nativeElement, '-moz-transition-duration', this.speed + 'ms');
this.renderer.setStyle(this.el.nativeElement, '-webkit-transition-duration', this.speed + 'ms');
this.renderer.setStyle(this.el.nativeElement, '-o-transition-duration', this.speed + 'ms');
this.renderer.setStyle(this.el.nativeElement, '-ms-transition-duration', this.speed + 'ms');
}
public fadeOut(duration: number) {
return new Promise(resolve => {
this.renderer.setStyle(this.el.nativeElement, 'opacity', '0');
setTimeout(() => {
this.renderer.setStyle(this.el.nativeElement, 'opacity', '1');
resolve();
}, duration);
});
}
public fadeIn(duration: number) {
this.renderer.setStyle(this.el.nativeElement, 'opacity', '0');
setTimeout(() => {
this.renderer.setStyle(this.el.nativeElement, 'transition', 'opacity ' + duration + 'ms');
this.renderer.setStyle(this.el.nativeElement, 'opacity', '1');
}, 0);
}
public lazyLoad() {
this.lazyLoadedImages.forEach((img) => {
img.load();
});
}
}