Griever: Javascript mehrmals gleichzeitig aufrufen

Beitrag lesen

Hallo,

ich habe ein kleines Problem, bei dem es mir an einer Idee fehlt.
Ich habe heute ein kleines Skript programmiert, dass Text „schreibmaschinen-ähnlich” in <span>s schreibt.

Auf der Webseite sieht das so aus: Beim anklicken eines Wortes (im Text) tauchen hinter diesem („schreibmaschinen-ähnlich”) mehrer Links auf.

Mit einem Link funktioniert mein Skript super, mit mehrern sieht es nicht mehr so gut aus.

Die Idee ist folgende:

--- HTML:

<span> Text </span>

<span style="cursor:pointer; cursor:hand;" onClick="

startel(1,'Flickr,','http://flickr.com/photos/a74Ri'); schreibel();
startel(2,'Delicious,','http://del.icio.us/Atari82'); schreibel();

">goto links </span>

<span id="1"></span>
<span id="2"></span>

--- JAVASCRIPT:

function startel(id,text,link) {

tmr=null;
pos=1;
lnk=link;
txt=text;
globalid=id;

}

function schreibel() {
  if(!tmr) tmr = window.setInterval("schreibel()", 50);
  teilText = txt.substr(0,pos);
  document.getElementById(globalid).innerHTML="<a target='_blank' href='" +lnk+ "'>" +teilText+ "</a>";
  if (pos >= txt.length) {

window.clearInterval(tmr);
  }
  pos++;
}


Wie man sicherlich gleich sieht wird beim Aufruf der erste Link „initialisiert“ (startl) und dann sein Skript gestartet (schreibel).

Sofort danach wird der zweite Link initialisiert und gestartet, was das Skript, welches ja absichtlich mit einer Verzögerung arbeitet durcheinander bringt.

Die Ideale Lösung wäre die, dass das der zweite Link wartet bis der erste fertig ist.

Aber ich hab keine Ahnung wie???

Meine bisher einzigste gute? Idee hat leider NICHT funktioniert:


go=1;

function startel(id,text,link) {

while (go=0){
        }

go=0;
tmr=null;
pos=1;
lnk=link;
txt=text;
globalid=id;

}

function schreibel() {
  if(!tmr) tmr = window.setInterval("schreibel()", 50);
  teilText = txt.substr(0,pos);
  document.getElementById(globalid).innerHTML="<a target='_blank' href='" +lnk+ "'>" +teilText+ "</a>";
  if (pos >= txt.length) {
    go=1;
    window.clearInterval(tmr);
  }
  pos++;
}


DANKE!

Tipp: Versuch es mal so, dass du NUR das betroffene Span auf die Funktion gibst und die Funktion das solange selbstständig abarbeitet, bis es fertig ist:

<a href="#" onclick="starte(document.all.linkticker1);starte(document.all.linkticker2)"></a>
<span name="linkticker1" id="linkticker1"></span>
<span name="linkticker2" id="linkticker2"></span>

<script type="text/javascript">
<!--
var textobjects = new Array()
textobjects["linkticker1"] = "blablabla1"
textobjects["linkticker2"] = "brabbel2"
function starte(targetobject) {
  var txt = textobjects[targetobject.name]
  var cnt = 0
  step(targetobject,txt,cnt)
}
function step(targetobject,txt,cnt) {
  // der ablauf an sich für das nächste zeichen aufgrund von cnt
  cnt++; // cnt hinauf zählen, dass beim nächsten Durchgang der nächste Buchstabe angehängt wird.
  if(cnt < txt.length) { // sind noch Zeichen anzuzeigen?
    setTimeout("step(" + targetobject + "," + txt + "," + cnt + ")",320) // Wenn ja, die Funktion nach 320 millisekunden (0,32 Sekunden) neu aufrufen.
  }
}
-->
</script>

vielleicht hilfts dir auf den Sprung. Den Eigentlichen Code für hab ich nich mit reingepostet, da ich dafür zu lange selbst probieren müsste. Doch dafür hätt ich immoment leider keine Zeit, da ich mein Apache mal zum laufen bringen will.

Ich hoffe, es hat dir geholfen.

MFG
Griever