Search code examples
angularowl-carousel

Trigger an event when owl-carousel reaches a specific currentSlideIndex


I am using owl-carousel in my Angular 4 application as shown below:

<owl-carousel #owlElement [options]="mySlideOptions" [items]="images" [carouselClasses]="['owl-theme', 'sliding']">
    <div class="item">
        <div class="coupons-div" style="cursor:pointer;">
            <img src="..//..//assets/images/slider/slider1.gif" />
        </div>
    </div>
    <div class="item">
        <div class="coupons-div" style="cursor:pointer;">
            <img src="..//..//assets/images/slider/slider2.gif" />
        </div>
    </div>
    <div class="item">
        <div class="coupons-div" style="cursor:pointer;">
            <img src="..//..//assets/images/slider/slider3.gif" />ng
        </div>

        <div class="carousel-caption d-none d-md-block">
            <!-- layer 1 -->

            <!-- layer 2 -->
            <div class="layer-1-2 wow slideInUp" data-wow-duration="2s" data-wow-delay=".1s">
                <h1>
                    <ul>
                        <li *ngFor="let item of firstoptions">{{item}}</li>
                    </ul>
                </h1>
            </div>

            <!-- layer 3 -->
            <div class="layer-1-3 hidden-xs wow slideInUp" data-wow-duration="2s" data-wow-delay=".2s">
                <a class="ready-btn right-btn page-scroll" routerLink="/" routerLinkActive="active" href="services">Nos
                    Services</a>
                <a class="ready-btn page-scroll" href="produits">Nos produits</a>
            </div>
        </div>
    </div>
    <div class="item">
        <div class="coupons-div" style="cursor:pointer;">
            <img src="..//..//assets/images/slider/slider4.gif" />
        </div>
        <div class="carousel-caption d-none d-md-block">
            <!-- layer 1 -->
            <div class="layer-1-1 hidden-xs wow slideInDown">
                <h2 class="title1"></h2>
            </div>

            <!-- layer 2 -->
            <div class="layer-1-2 wow slideInUp">
                <h1>
                    <div [@listAnimation]="items.length" (@listAnimation.start)="logAnimation($event)"
                        (@listAnimation.done)="logAnimation($event)">
                        <span *ngFor="let item of items">
                            {{item}}
                        </span>
                    </div>
                </h1>
            </div>

            <!-- layer 3 -->
        </div>
    </div>
</owl-carousel>

My component.ts

mySlideOptions = { items: 1, dots: false, nav: false, loop: true, autoplay: true, autoplayTimeout: 6000, autoplayHoverPause: true, animateOut: 'slideOutDown', animateIn: 'flipInX' };
images = ['..//..//assets/images/slider/slider1.gif', '..//..//assets/images/slider/slider2.gif', '..//..//assets/images/slider/slider3.gif', '..//..//assets/images/slider/slider4.gif']
@ViewChild('owlElement') owlElement: OwlCarousel;

ngOnInit() {
    console.log(this.owlElement);
    console.log("index is");
    console.log(this.owlElement.$owlChild.currentSlideIndex);
}

I want to trigger an event when the fourth slide is shown. How can I do that?

Note : I tried to use the currentSlideIndex but it didn't work. An error message appears telling that the currentSlideIndex is undefined.

OwlCarousel {differs: IterableDiffers, carouselClasses: "", options: {…}, $owlChild: OwlChild}$owlChild: OwlChild {el: ElementRef, owlClass: true, options: {…}, $owl: jQuery.fn.init(1), currentSlideIndex: 3}carouselClasses: (2) ["owl-theme", "sliding"]differ: DefaultIterableDiffer {_length: 4, _collection: Array(4), _linkedRecords: _DuplicateMap, _unlinkedRecords: null, previousItHead: IterableChangeRecord, …}differs: IterableDiffers {factories: Array(1)}options: {items: 1, dots: false, nav: false, loop: true, autoplay: true, …}_items: (4) ["..//..//assets/images/slider/slider1.gif", "..//..//assets/images/slider/slider2.gif", "..//..//assets/images/slider/slider3.gif", "..//..//assets/images/slider/slider4.gif"]proto: Object home.component.ts:121 index is home.component.ts:123 undefined


Solution

  • Try this

    currentSlideIndex:any;
    ngAfterViewInit() {
        this.owlElement.$owlChild.$owl.on("changed.owl.carousel", (event: any) => {
            this.currentSlideIndex = event.item.index;
            console.log(this.currentSlideIndex);
        });
    }