import {
Component,
Renderer2,
ViewChild,
ContentChildren,
QueryList,
ElementRef,
Input,
ChangeDetectorRef
} from '@angular/core';
import { SwiperDirective } from '../directives/swiper.directive';
import { UILazyloadDirective } from '../directives/ui-lazy-load.directive';
@Component({
selector: 'ui-carousel-item',
template : `
`,
styles: [`
:host{
width: 100%;
}
.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%;
background: orange;
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") el: ElementRef;
@ViewChild(SwiperDirective) swiper: SwiperDirective;
@ContentChildren(UILazyloadDirective) lazyLoadedImages: QueryList;
speed: number;
static transitionStyle: any = {};
currentPosition: number = 0;
position: number = 0;
zIndex: number;
constructor(
private renderer: Renderer2,
private ref: ChangeDetectorRef
) { }
ngOnInit() {
}
get transition() {
return UICarouselItemComponent.transitionStyle;
}
set transition(transitionStyle) {
UICarouselItemComponent.transitionStyle = transitionStyle;
}
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)');
}
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)');
}
setzIndex(zIndex: number) {
this.renderer.setStyle(this.el.nativeElement, 'z-index', zIndex);
}
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");
// this.transition = {
// "transition": "none",
// "-moz-transition": "none",
// "-webkit-transition": "none",
// "-o-transition": "none",
// "-ms-transition": "none"
// }
}
enableTransition() {
// this.transition = {
// "transition": "transform .5s",
// "-moz-transition": "transform .5s",
// "-webkit-transition": "transform .5s",
// "-o-transition": "transform .5s",
// "-ms-transition": "transform .5s",
// }
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");
}
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)
});
}
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, "transition-duration", duration+ "ms");
this.renderer.setStyle(this.el.nativeElement, "opacity", "1");
}, 0)
}
lazyLoad() {
this.lazyLoadedImages
.forEach((img) => {
img.load();
});
}
}