2017-07-05 5 views
1

Ich muss das Intervall auf mouseenter Ereignis starten und ich muss es auf mouseleave stoppen.clearInterval() funktioniert nicht

‚clearInterval‘ Anhalten nicht das Intervall, wenn ‚setInterval‘ wird gestartet, indem ‚MouseEnter-‘ Ereignis, während es ordnungsgemäß funktioniert, wenn ‚setInterval‘ wird gestartet, indem ‚mousedown-‘ event

demo.ts

interval_bs:any; 
    startInterval(){  
    this.interval_bs=setInterval(()=>{ 
     if(this.activeIndex<3){ 
     this.activeIndex+=1; 
     } 
     else{ 
     this.activeIndex=0; 
     }  
    },2000) 
    } 

    stopInterval(){ 
    clearInterval(this.interval_bs); 
    } 

demo.html

<div (mouseenter)="startInterval()" (mouseleave)="stopInterval()" >  
     <ng-template ngFor let-bs [ngForOf]="back_screens" let-bsi="index" > 
     <img [src]="bs.image" *ngIf="activeIndex==bsi" > 
     </ng-template> 
</div> 
+1

legte eine console.log innerhalb des 'stopInterval() gelten' vielleicht die Funktion nicht wird überhaupt angerufen –

+0

überprüft es. Es heißt – Mubashir

+0

Wenn Sie 'console.log (this)' zu beiden Methoden hinzufügen, was wird es gedruckt? –

Antwort

2

Jetzt Problem gelöst wurde. Deklariere eine Variable 'start_count' und initialisiere sie auf Null. bei Ereignis '(mouseleave)', 'start_count' auf Null zurücksetzen. Jetzt auf ‚(MouseEnter-)‘ Ereignis der ‚start_count‘ erhöhen und eine Bedingung ‚setInterval()‘ Methode

interval_bs:any; 
start_count:number=0; 
startInterval(){ 
    this.start_count+=1; 
    if(this.start_count==1){ 
     this.interval_bs=setInterval(()=>{ 
     if(this.activeIndex<3){ 
      this.activeIndex+=1; 
     } 
     else{ 
      this.activeIndex=0; 
     }   
     },2000)  
    } 

    } 

    stopInterval(){ 
    this.start_count=0; 
    clearInterval(this.interval_bs); 
    } 
+0

selbst Antwort, gute eins: p –

+0

:) @PardeepJain – Mubashir

Verwandte Themen