Javascript mehrmals gleichzeitig aufrufen
Alex
- javascript
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!
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
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.
---------- (...) -----------
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:
------------- (...) ----------
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
Hi,
den Ansatz an sich finde ich recht gut, aber soweit ich Deinen Code durchschaue arbeitet er auch nur mit genau 2 Links.
Ich habe es vielleicht nicht richtig erwähnt, aber die Funktion muss mit beliebig vielen Links arbeiten.
Die Idee, dass Diese erstmal alle in einem Array gesammelt werden und dann der Reihe nach abgearbeitet könnte funktionieren.
Könnte das funktionieren?
Da ist nur wieder das Problem, dass ich mich mit Arrays garnicht auskenne :(
Schöner Gruß, Alex
hi,
Die Idee, dass Diese erstmal alle in einem Array gesammelt werden und dann der Reihe nach abgearbeitet könnte funktionieren.
Könnte das funktionieren?
Was denn jetzt, könnte es, oder könnte es?
Da ist nur wieder das Problem, dass ich mich mit Arrays garnicht auskenne :(
http://de.selfhtml.org/javascript/objekte/array.htm
gruß,
wahsaga
hi,
Die Idee, dass Diese erstmal alle in einem Array gesammelt werden und dann der Reihe nach abgearbeitet könnte funktionieren.
Könnte das funktionieren?
Was denn jetzt, könnte es, oder könnte es?
Ich dachte, dass könntet ihr mir sagen ;)
Da ist nur wieder das Problem, dass ich mich mit Arrays garnicht auskenne :(
http://de.selfhtml.org/javascript/objekte/array.htm
gruß,
wahsaga
Ok, das mit den Arrays habe ich mir jetzt mal angeschaut. Ich werde da gleich nachher mal ein wenig herumprobieren.
Soweit ich gesehen habe, ist es möglich einzelne Elemente mit shift() zu löschen und mit push() anzuhängen.
Also meine Idee ist es alle Variablen erstmal in ein Array hinten anzustellen. Und dann das Array von vorne auszulesen und im letzten Schritt der Funktion das vorderste Element zu löschen.
---
<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>
---
function startel(id,text,link) {
pos=1;
tmrs=new Array();
tmr=null;
lnk=new Array();
lnk.push(link);
txt=new Array();
txt.push(text);
globalid=new Array();
globalid.push(id);
}
function schreibel() {
if(!tmrs[1]) tmrs[1] = window.setInterval("schreibel()", 50);
teilText = txt[1].substr(0,pos);
document.getElementById(globalid[1]).innerHTML="<a target='_blank' href='" +lnk[1]+ "'>" +teilText+ "</a>";
if (pos >= txt[1].length) {
tmrs.shift();
lnk.shift();
txt.shift();
globalid.shift();
window.clearInterval(tmrs[1]);
}
pos++;
}
---
Also irgendwie in etwa so.
Aber wie ist sichergestellt, dass die Funktion dann auch mehrmals ausgeführt wird?
Und der schreibel()-Aufruf sollte dann auch nicht mehr im HTML geschehen, oder?
Hat da vielleicht jemand von Euch eine gute Idee parrat?
Dank!
Alex
So, mein Problem hat (außer Griever) scheinbar niemanden so wirklich interessiert ;)
Vielleicht ist die Lösung ja interessantener:
---
txt=new Array();
lnk=new Array();
globalid=new Array();
function startel(id,text,link) {
newid = globalid.push(id);
txt.push(text);
lnk.push(link);
if (globalid.length == 1){
pos=1;
tmr=null;
schreibel();
}
}
function schreibel() {
if(!tmr) tmr= window.setInterval("schreibel()", 50);
teilText = txt[0].substr(0,pos);
document.getElementById(globalid[0]).innerHTML="<a target='_blank' href='" +lnk[0]+ "'>" +teilText+ "</a>";
if (pos >= txt[0].length) {
lnk.shift();
txt.shift();
globalid.shift();
window.clearInterval(tmr);
if (globalid.length > 0){
pos=1;
tmr=null;
schreibel();
}
}
pos++;
}
---
Aufruf im HTML mit:
---
<span style="cursor:pointer; cursor:hand;" onClick="
startel(1,'Flickr,','http://flickr.com/photos/a74Ri');
startel(2,'Delicious,','http://del.icio.us/Atari82');
startel(3,'Myspace','http://www.myspace.com/atary');
">goto "web" ,8,1 </span>
<span id="1" class="Switch"></span>
<span id="2" class="Switch"></span>
<span id="3" class="Switch"></span>
---
… und alles ganz alleine gelöst :) obwohl ich heute Morgen noch nicht mal wusste, was nen Array ist.
LevelUP=new Array(1,5,10,50,100);
AlexLevel=AlexLevel+LevelUP[3];
Gruß, Alex