franz : Schleifenkontrolle per globale Variablen oder mit Class-Objekt?

Hallo allerseits,
ich habe folgendes Problem:
eine Slideshow durchwandert eine Menge Bilder eines Arrays in einer for-Schleife. Mit setTimeout läßt sich das ganze ja auch so regulieren, dass man die Bilder gemütlich betrachten kann (zB. 4 secs/img).
Nun will ich dem Benutzer aber eine Möglichkeit geben, an einer beliebigen Stelle auf STOP zu drücken. Hier sollte die Slideshow stehen bleiben.
zur Zeit habe ich innerhalb einer Funktion eine for-Schleife folgendermaßen gebaut:
wobei:----------
slds ist das Array mit den Bildnamen
document.slide ist das image, dessen src Wert alle interv wechselt
-----------
var boolstop = false;

function initslideshow(){
[.....]
for (var i = 0;i < slds.length;i++){
  window.setTimeout("document.slide.src='slides/" + slds[i]+"'",j*interv);
  j++;
  if (boolstop){
   break;
   return false;}
 }
}

Wie kann nun der laufenden Schleife beigebracht werden, dass sich bei bild Nr.17 der Wert von boolstop geändert hat, da der User die Funktion stopslides() aufgerufen hat, die folgendes macht:

function stopslides(){
boolstop = true;
}

Nur so klappt es leider nicht, da ich innerhalb von stopslides korrekterweise nochmals initslideshow() aufrufen müßte, die wiederum beim ersten Bild und nicht bei Bild Nr.17 Halt machen würde. Aber die einmal aufgerufene initslides läßt sich derart nicht unterbrechen. Seufz.
Wie macht man das bloß, hat jemand eine Ahnung?
Wie könnte die Klassenlösung aussehen (this.boolstop = true)?

Vielen Dank für Euren Beitrag,
Franz

  1. Hallo,

    eine Slideshow durchwandert eine Menge Bilder eines Arrays in einer for-Schleife. Mit setTimeout läßt sich das ganze ja auch so regulieren, dass man die Bilder gemütlich betrachten kann (zB. 4 secs/img).

    IMHO würde sich window.setInterval() eher anbieten.

    Nun will ich dem Benutzer aber eine Möglichkeit geben, an einer beliebigen Stelle auf STOP zu drücken. Hier sollte die Slideshow stehen bleiben.

    Das wäre, wie gesagt, kein Problem per Event-Handler window.clearInterval aufzurufen.

      
    var i=0;  
    function initslideshow(){  
       // [.....]  
       document.slide.src='slides/' + slds[i];  
       i++;  
       if(i==slds.length){  
           i=0;  
       }  
    }  
    function halt(e){  
       if(e.firstChild.data=='halt'){  
           e.firstChild.data='weiter';  
           window.clearInterval(inter);  
       }  
       else{  
           e.firstChild.data='halt';  
           inter=window.setInterval("initslideshow()",4000);  
       }  
    }  
    var inter=window.setInterval("initslideshow()",4000);  
    
    

    <b onClick="halt(this)">halt</b>

    Gruß aus Berlin!
    eddi

    1. Hallo eddi,
      Danke für die Antwort, damit hat sich das natürlich positiv geklärt. Ich war so von der Schleife besessen, dass ich ganz auf clearInterval/Timeout vergessen habe.
      Super. Grüße auch aus Salzburg!
      franz