Skript mehrmals parallel ausführen...
TommyR
- javascript
Hallo SelfHTML'ler,
ich hab ein kleines Problemchen mit folgender Aufgabe, doch ein was Vorweg ich möchte hier KEINE Komplet-Lösungen
ergattern, sondern lediglich einige Realisierungsvorschläge:
Aufgabenstellung:
1 Vertrautmachen mit den JS-Objekten: "event", "this", "srcElement"
2 Erstellen eines Konzeptes für das "FadeScript" (z.b. Ereignisbaum [Beispiel im Anhang])
3 Im genauen soll das Skript:
a nicht explizit angesprochen werden müssen (z.b. über <a onmouseover="fademe();">linktext</a>)
b eher so: "document.onmouseover = fademe;"
c unter allen neueren Browsern funktionieren (NS4;NS6+;OP5+;MSIE5+;Konqueror)
d explizit angesprochen werden können (z.b. so <body onload="fade('elementname/id');">)
e eine "'nofade'-Class" beinhalten, die dafür sorgt dass auch beim expliziten ansprechen
eines HTML-Elementes mit "fade" das Element NICHT anfängt zu "faden" (das darf nicht
funktionieren: <div class="nofade" onmouseover="fademe();">)
f auch grafiken faden, wenn der MSIE verwendet wird (alpha-filter [<a href=""><img />testtext</a>])
HINWEIS: es muss egal sein ob der User den Cursor über der Grafik oder über dem Text hat, es
muss beides anfangen zu faden.
g mehrere Objekte zeitgleich "faden" lassen können, ohne das sich das Skript selber stört.
Im spezifischen habe ich ein grosses Problem damit ein Skript mit mehreren Instanzen laufen zu lassen, also 2-3x parallel
zueinander.. wie kann ich es realisieren, das ich mehrere Elemente zeitgleich "faden" lassen kann, ohne das die Instanzen
des Skripts sich selbst behindern?
Hi,
ich hab ein kleines Problemchen mit folgender Aufgabe, doch ein was Vorweg ich möchte hier KEINE Komplet-Lösungen
ergattern, sondern lediglich einige Realisierungsvorschläge:
gut :-) Du möchtest Dich mit window.setTimeout() vertraut machen.
1 Vertrautmachen mit den JS-Objekten: "event", "this", "srcElement"
Und mit diesen Objekten ;-)
d explizit angesprochen werden können (z.b. so <body onload="fade('elementname/id');">)
e eine "'nofade'-Class" beinhalten, die dafür sorgt dass auch beim expliziten ansprechen [...]
Und mit den Grundlagen von DOM.
f auch grafiken faden, wenn der MSIE verwendet wird (alpha-filter [<a href=""><img />testtext</a>])
Und mit der (Mozilla-proprietären) CSS-Eigenschaft -moz-transparancy.
Im spezifischen habe ich ein grosses Problem damit ein Skript mit mehreren Instanzen laufen zu lassen, also 2-3x parallel
Dieses Problem liegt daran, dass es nicht geht. Multitasking gibt's hier nicht.
wie kann ich es realisieren, das ich mehrere Elemente zeitgleich "faden" lassen kann, ohne das die Instanzen
des Skripts sich selbst behindern?
Das Geheimnis liegt daran, den Begriff "zeitgleich" in Anführungszeichen zu setzen.
Cheatah
Grüssle Cheatah,
Und mit der (Mozilla-proprietären) CSS-Eigenschaft -moz-transparancy.
Nein, die Aufgabenstellung kommt nicht von mir aber erstmal danke für den Hinweis ^_^
Dieses Problem liegt daran, dass es nicht geht. Multitasking gibt's hier nicht.
Das Geheimnis liegt daran, den Begriff "zeitgleich" in Anführungszeichen zu setzen.
Geht nicht? ich habe erst daran gedacht dem Skript ein Dynamisch erzeugtes Objekt zu übergeben (mit eval), dass einmal aus einem festen Text (zB: "var") und zum anderen aus der id des zu Fadenen Objektes.. dann sollte mas Skript überprüfen, ob das dyn.obj./die Variable (zB: varMYOBJ) den wert true hat. So "könnte" das Skript doch auslesen welches Objekt gerade zu faden is und welches nicht. (varOBJI = true; varOBJII = false; usw...) und so könnte man das auch nicht machen?
Hi,
Und mit der (Mozilla-proprietären) CSS-Eigenschaft -moz-transparancy.
Nein, die Aufgabenstellung kommt nicht von mir aber erstmal danke für den Hinweis ^_^
tja, warum nicht besser sein als gefordert? ;-)
Geht nicht? ich habe erst daran gedacht [...]
Wargl. Kleiner Tipp: Der Beginn meines vorherigen Postings sollte Dir als Hilfe zur Lösungsfindung gereichen.
Cheatah
Grüssle,
setTimeout kann ich nicht verwenden (glaube ich zumindest) denn das ist mein Skript:
<script>
//<!--
//<![CDATA[
/* Diese Farben sind für Netscape und Opera, da diese die deHexize-Funktion nicht unterstuetzen */
//priFade
colors = new Array("ffffff", "D2CFC2", "B2AE97", "999476", "827C56", "70693F", "5E5626", "5E5626", "70693F", "827C56", "999476", "B2AE97", "D2CFC2", "ffffff")
//secFade
altColors = new Array();
/* MSIE Farben... */
fadeInColor = "#5E5626"; //priFade
fadeOutColor = "#ffffff"; //priFade
altInColor = ""; //secFade
altOutColor = ""; //secFade
/* Variablen ersetzen */
//fadeInColor = dehexize(fadeInColor.toLowerCase());
//fadeOutColor = dehexize(fadeOutColor.toLowerCase());
//altInColor = dehexize(altInColor.toLowerCase());
//altOutColor = dehexize(altOutColor.toLowerCase());
/* Farb-Details festlegen */
speed = 100;
stepIn = colors.length * 2; //def. 35
stepOut = colors.length * 2; //def. 35
/* sonst. Variablen */
var brwsr;
var fadeId = new Array();
var elementDoc, elementTag, elementClass, elementUID;
var timerID;
autofade = 0;
colorNum =0;
var elm;
/* Event-Handler */
document.onmousemove = detect;
function detect() {
if (document.layers) { /* NN4 (NN) */
for(j=0; j < document.links.length; j++) {
document.links[j].onmouseover = doOver;
document.links[j].onmouseout = doOut;
}
} else if (document.all) { /* MSIE */
if (event.srcElement.parentNode.tagName=="A" && event.srcElement.tagName=="IMG") {
} else if (event.srcElement.firstChild.tagName=="IMG" && event.srcElement.tagName=="A") {
} else if (event.srcElement.tagName=="A" && event.srcElement.firstChild.tagName!="IMG") {
event.srcElement.onmouseover = doOver;
event.srcElement.onmouseout = doOut;
}
} else if (document.getElementById) { /* NN6+ (NS) OP */
for(j=0; j < document.getElementsByTagName("a").length; j++) {
link = document.getElementsByTagName("a");
link[j].onmouseover = doOver;
link[j].onmouseout = doOut;
}
}
}
function doOver(obj) {
clearTimeout(timerID);
/* Wandel leeres obj in id des aktiven elm um! (ie||ns/moz||op) */
if (!obj || obj=="[object]" || obj=="[object Event]" || obj=="[object MouseEvent]") {
elm = this.id;
} else {
elm = obj;
}
autofade = 1; //<== DAS ist das eigentliche Problem
fade(elm);
}
function doOut(obj) {
clearTimeout(timerID);
/* Wandel leeres obj in id des aktiven elm um! (ie||ns/moz||op) */
if (!obj || obj=="[object]" || obj=="[object Event]" || obj=="[object MouseEvent]") {
elm = this.id;
} else {
elm = obj;
}
autofade = null; //<== und nat. das
}
function fade(obj) {
xmp = obj;
if (autofade==1) {
if (colorNum<=colors.length-1) {
document.getElementById(xmp).style.color = "#" + colors[colorNum];
colorNum++
timerID = setTimeout("fade(xmp)", speed); //<=== hier?
} else {
colorNum = 0;
timerID = setTimeout("fade(xmp)", speed); //<=== oder hier?
}
}
}
//]]>
//-->
</script>
Ich benutze bereits ein timeout um den "Fade" pulisieren zu lassen..
Sorry, ich hab echt keinen Plan wie ich mit einem weiteren TimeOut mehrere Objekte "faden" könnt.. *schnief*
Hi,
setTimeout kann ich nicht verwenden (glaube ich zumindest) denn das ist mein Skript:
window.setTimeout() kannst Du verwenden, denn Du gestaltest Dein Script entsprechend.
<script>
ERROR: Required attribute "type" missing.
//<!--
//<![CDATA[
Ui, dann aber bitte ohne den HTML-Kommentar ;-)
Sorry, ich hab echt keinen Plan wie ich mit einem weiteren TimeOut mehrere Objekte "faden" könnt.. *schnief*
Du sollst mit nur einem Timeout pro Fade(-Stufe) arbeiten. Ich hoffe, Du nimmst es mir nicht übel, wenn ich mir nicht die Mühe gemacht habe, Deinen Code genau zu verstehen; aber gehe primär von DOM-Kenntnissen des Browser aus, nutze document.layers und document.all nur als Alternative.
Cheatah
Grüssle,
ERROR: Required attribute "type" missing.
Nö, ist nur eine Test-Seite, da schreib ich da nicht rein.. (zumal ich ein eigenes XHTML-DTD verwende inc. type2-angabe ;o) )
Ui, dann aber bitte ohne den HTML-Kommentar ;-)
Warum?? Siehe Unterschiede zwischen HTML und XHTML, da steht der HTML-Kommentar auch dabei.. :oD
nutze document.layers und document.all nur als Alternative.
Die Weiche am Skript-Anfang deckt alle Browser (doc.layers/doc.all/doc.getBy)
äähm noch ne Frage: kann ich -moz-opacity eigentlich per JavaScript ansprechen? den das "-" erzeugt ja nen Syntax-Error..
Hi,
ERROR: Required attribute "type" missing.
Nö, ist nur eine Test-Seite, da schreib ich da nicht rein.. (zumal ich ein eigenes XHTML-DTD verwende inc. type2-angabe ;o) )
Du verstehst aber, dass ich das für jene erwähnen muss, die Dein Posting eventuell im Archiv finden :-)
Ui, dann aber bitte ohne den HTML-Kommentar ;-)
Warum?? Siehe Unterschiede zwischen HTML und XHTML, da steht der HTML-Kommentar auch dabei.. :oD
Ich bin nicht ganz sicher, wie eine (beliebige) JavaScript-Engine darauf reagiert - zumindest wenn bereits ein HTML-Kommentar gefunden wurde. In jedem Fall wirkt es schon arg merkwürdig ;-) Und ganz nebenbei bemerkt: "//<!--" wird bei einem Client, der das "<!--" nötig hat, zur Ausgabe von "//" führen.
nutze document.layers und document.all nur als Alternative.
Die Weiche am Skript-Anfang deckt alle Browser (doc.layers/doc.all/doc.getBy)
Ja, aber in einer ungünstigen Reihenfolge. Neuere IEs beherrschen (naja, mehr oder minder *g*) ebenfalls DOM, werden bei Deinem Code jedoch in den document.all-Zweig laufen. Zudem sind ausgerechnet bei den modernsten Browsern zwei zusätzliche Prüfungen nötig, bis der DOM-Zweig gefunden wird.
äähm noch ne Frage: kann ich -moz-opacity eigentlich per JavaScript ansprechen? den das "-" erzeugt ja nen Syntax-Error..
Wie würdest Du "moz-opacity" ohne führendes "-" ansprechen? - Denk das einfach einen Schritt weiter ;-)
Cheatah
Grüssle,
Ich bin nicht ganz sicher, wie eine (beliebige) JavaScript-Engine darauf reagiert - zumindest wenn bereits ein HTML-Kommentar gefunden wurde. In jedem Fall wirkt es schon arg merkwürdig ;-) Und ganz nebenbei bemerkt: "//<!--" wird bei einem Client, der das "<!--" nötig hat, zur Ausgabe von "//" führen.
Das "<![CDATA[" ist ja kein Kommentar, sonder eine XML-Anweisung das der folgende Code nicht als HTML, etc. zu interpretieren ist.. :oD
Zu der Weiche: der IE soll ja in den all Zweig und NICHT in den getBy.. (wegen dem Grafik-Fade) was sich aber nun auch ändert, da ich jetzt weiss dass ich auch mit dem Moz. die Transparens einstellen kann.. aber wie weiss ich echt nicht ich hab bei Google gesucht und nichts gefunden, und mit "rumprobieren" hab ich auch nix heraus gefunden.. sag's mir böööddööö! ^_^'
Hi,
Das "<![CDATA[" ist ja kein Kommentar, sonder eine XML-Anweisung das der folgende Code nicht als HTML, etc. zu interpretieren ist.. :oD
_mir_ ist das klar. Dem JavaScript-Interpreter, der gerade mal in der Lage ist, ein "<!--" zu ignorieren auch?
Zu der Weiche: der IE soll ja in den all Zweig und NICHT in den getBy..
Argl. Nun ja. Dir ist aber bekannt, dass Clients diejenigen CSS-Eigenschaften einfach ignorieren, die sie nicht kennen?
aber wie weiss ich echt nicht ich hab bei Google gesucht und nichts gefunden, und mit "rumprobieren" hab ich auch nix heraus gefunden..
http://www.xulplanet.com/references/elemref/ref_StyleProperties.html#prop_-moz-opacity
Cheatah
Grüssle,
_mir_ ist das klar. Dem JavaScript-Interpreter, der gerade mal in der Lage ist, ein "<!--" zu ignorieren auch?
Deshalb ja auch das "//" davor so liest der XML-Parser nur das "<!--" und das "<![CDATA[" und der JS-Interpret liest nur das "//"
Argl. Nun ja. Dir ist aber bekannt, dass Clients diejenigen CSS-Eigenschaften einfach ignorieren, die sie nicht kennen?
Ja, aber nicht wenn ich die CSS-Eigenschaften per JS ändere :op (Error: this.filters.alpha..... <= has no properties!)
http://www.xulplanet.com/references/elemref/ref_StyleProperties.html#prop_-moz-opacity
Danke ^_^
Grüssle,
ein kleiner Nachtrag:
http://www.xulplanet.com/references/elemref/ref_StyleProperties.html#prop_-moz-opacity
Da steht leider nichts von oder über JS.. wie ich es in CSS verwende ist mir schon klar, aber wie gesagt: JS? Fehlanzeige.. ^_^