preload NaN aber nur server Seitig

marian

Erfahrenes Mitglied
Hi,
Ich hab wegen meinem Script ein neues Thema aufgemacht da es sich jetzt nicht mehr um das for-schleifen Problem handelt.
Ich hab jetzt die for schleife durch eine onEnterFrame function ersetzt die offline funktioniert, aber auf dem Server hab ich ein Problem mit den Variablen, die mir Nan oder 0 ausgeben. Getestet hab ich das durch ein TextfField welches mir die Variablen ausgibt.

http://www.remworx.de /worx/bilder (die seite befindet sich im Aufbau!)

und hier noch der Script:

PHP:
// Tabelle setzen
function tabelle(posX, posY, anzahl) {
	this.attachMovie("mc_thumbs", "mc_thumbs", 4);
	this.mc_thumbs._x = posX;
	this.mc_thumbs._y = posY;
	this.posY = posY;
	this.posX = posX;
	mc = new Array();
	mc = anzahl;
	this.createEmptyMovieClip("inhalt", 2);
	this.inhalt._y = this.posY;
	var i = 0;
	var k = 0;
	var j = 0;
	var enable = 0;
	this.onEnterFrame = function() {
		if (k<anzahl) {
			nName = "clip"+k;
			if (i<pS) {
				this.mc_thumbs.attachMovie("contclip", nName, k);
				this.mc_thumbs[nName].geladen = 0;
				this.mc_thumbs[nName]._width = this.pB;
				this.mc_thumbs[nName]._height = this.pW;
				this.mc_thumbs[nName]._x = i*(this.pB+this.abst);
				this.mc_thumbs[nName]._y = j*(this.pW+this.abst);
				this.mc_thumbs[nName].TposX = this.mc_thumbs[nName]._x;
				this.mc_thumbs[nName].TposY = this.mc_thumbs[nName]._y;
				this.mc_thumbs[nName].bildname = mein_xml.firstChild.childNodes[k].attributes.name;
				this.mc_thumbs[nName].beschreibung = mein_xml.firstChild.childNodes[k].attributes.beschreibung;
				this.mc_thumbs[nName].autor = mein_xml.firstChild.childNodes[k].attributes.autor;
				this.mc_thumbs[nName].nr = "Bild "+(k+1)+" von "+(mein_xml.firstChild.childNodes.length);
				this.mc_thumbs[nName].zeit = 0;
				this.mc_thumbs[nName].mc_bild.loadMovie(mein_xml.firstChild.childNodes[k].attributes.pic);
				this.mc_thumbs[nName].pix = mein_xml.firstChild.childNodes[k].attributes.pic;
				ausgabe += "Bild="+mein_xml.firstChild.childNodes[k].attributes.pic+"\n";
				//
				//
				this.mc_thumbs[nName].onRollOver = function() {
					if (this.geladen == 1) {
						_root.song2.start();
						this._parent._parent.bildName = this.bildname;
						this.onEnterFrame = function() {
							this.zeit++;
							this._height = pW+this.zeit*3;
							this._width = pB+this.zeit*3;
							this._x -= this.zeit-1;
							this._y -= this.zeit-1;
							if (this.zeit>3) {
								delete this.onEnterFrame;
							}
						};
						this.swapDepths(k++);
						toolStart();
						//this.mc_bild.play();
						//
						this.effeckt.gotoAndPlay("an");
					}
				};
				this.mc_thumbs[nName].onRollOut = function() {
					if (this.geladen == 1) {
						//scale bilder klein 
						this.onEnterFrame = function() {
							this.zeit--;
							this._width = pB+this.zeit*3;
							this._height = pW+this.zeit*3;
							this._x += this.zeit;
							this._y += this.zeit;
							if (this.zeit<1) {
								delete this.onEnterFrame;
								this.zeit = 0;
								this._width = pB;
								this._height = pW;
								this._x = this.TposX;
								this._y = this.TposY;
							}
						};
						//
						this.effeckt.gotoAndPlay("aus");
						toolStop();
					}
				};
				this._parent._parent.toolTip.onMouseMove = function() {
					updateAfterEvent();
				};
				// bilder gross laden
				this.mc_thumbs[nName].onRelease = function() {
					if (this.geladen == 1) {
						autor = this.autor;
						bildname = this.bildname;
						bildNr += "BildNummer "+this.nr;
						bildInfo = this.beschreibung;
						pix = this.pix;
						this._parent._parent.pixGross(pix, autor, bildname, bildNr, bildInfo);
					}
				};
				// Preview-Preloader
				this.mc_thumbs[nName].onEnterFrame = function() {
					//this.effeckt.gotoAndStop("warte");
					var gesamt = this.mc_bild.getBytesTotal();
					var bereits = this.mc_bild.getBytesLoaded();
					var prozent = bereits*100/gesamt;
					this.balken_mc._width = prozent*0.45;
					var pausgabe = int(this.prozent)+"%";
					this._parent._parent.ausgabe += "Bereits="+this.mc_bild.getBytesLoaded()+"\n";
					warte_txt = "";
					if (prozent>=100) {
						k++;
						i++;
						this.mc_bild._width = 50;
						this.mc_bild._height = 50;
						pausgabe = "";
						this._parent._parent.ausgabe += "Prozent="+prozent+"\n";
						this._parent._parent.ausgabe += "Gesamt="+gesamt+"\n";
						this._parent._parent.ausgabe += this.mc_bild+":Sichtbar="+this.mc_bild._visible+"\n";
						this.geladen = 1;
						this.balken_mc._visible = 0;
						this.warte_txt = "";
						var enable = 0;
						delete this.onEnterFrame;
					}
				};
			} else {
				if (j<pR) {
					j++;
					i = 0;
				}
			}
		} else {
			delete this.onEnterFrame;
		}
	};
}

kann das sein das sich irgendwelche onEnterFrame functionen überschreiben

Oder könnte ihr mir nen Tip geben wie ich das besser Lösen könnte?!

Gruß
 
Hi,

getBytesTotal() ist am Anfang oft mal -1 oder 0. Das führt zu einer Division by Zero und zum NaN in prozent.

Berechne die Prozente also erst, wenn getBytesTotal() größer als 0 ist.

Gruß
.
 
Danke Datic!

PHP:
if (gesamt > 0) {
}

wenn ich die prozentberechnung in die abfrage schreibe dann geht nichts mehr.
Es scheint aber so, das die onEnterFunction über der if abfrage weiter läuft, siehe http://www.remworx.de worx/bilder.

der script
PHP:
// Tabelle setzen
function tabelle(posX, posY, anzahl) {
	this.attachMovie("mc_thumbs", "mc_thumbs", 4);
	this.mc_thumbs._x = posX;
	this.mc_thumbs._y = posY;
	this.posY = posY;
	this.posX = posX;
	mc = new Array();
	mc = anzahl;
	this.createEmptyMovieClip("inhalt", 2);
	this.inhalt._y = this.posY;
	var i = 0;
	var k = 0;
	var j = 0;
	var enable = 0;
	this.onEnterFrame = function() {
		if (k<anzahl) {
			nName = "clip"+k;
			if (i<pS) {
				this.mc_thumbs.attachMovie("contclip", nName, k);
				this.mc_bild[nName].mc_bild._visible = 0;
				this.mc_thumbs[nName].geladen = 0;
				this.mc_thumbs[nName]._width = this.pB;
				this.mc_thumbs[nName]._height = this.pW;
				this.mc_thumbs[nName]._x = i*(this.pB+this.abst);
				this.mc_thumbs[nName]._y = j*(this.pW+this.abst);
				this.mc_thumbs[nName].TposX = this.mc_thumbs[nName]._x;
				this.mc_thumbs[nName].TposY = this.mc_thumbs[nName]._y;
				this.mc_thumbs[nName].bildname = mein_xml.firstChild.childNodes[k].attributes.name;
				this.mc_thumbs[nName].beschreibung = mein_xml.firstChild.childNodes[k].attributes.beschreibung;
				this.mc_thumbs[nName].autor = mein_xml.firstChild.childNodes[k].attributes.autor;
				this.mc_thumbs[nName].nr = "Bild "+(k+1)+" von "+(mein_xml.firstChild.childNodes.length);
				this.mc_thumbs[nName].zeit = 0;
				this.mc_thumbs[nName].mc_bild.loadMovie(mein_xml.firstChild.childNodes[k].attributes.pic);
				this.mc_thumbs[nName].pix = mein_xml.firstChild.childNodes[k].attributes.pic;
				ausgabe.text += "Bild="+mein_xml.firstChild.childNodes[k].attributes.pic+"\n";
				//
				// Preview-Preloader
				this.mc_thumbs[nName].onEnterFrame = function() {
					this.effeckt.gotoAndStop("warte");
					var gesamt = this.mc_bild.getBytesTotal();
					var bereits = this.mc_bild.getBytesLoaded();
					if (gesamt > 0) {
						var prozent = bereits*100/gesamt;
						balken_mc._width = prozent*0.45;
						var pausgabe = int(this.prozent)+"%";
						this._parent._parent.ausgabe.text += "Bereits="+this.mc_bild.getBytesLoaded()+"\n";
						warte_txt = "";
						if (prozent>=100) {
							k++;
							i++;
							this.mc_bild.stop();
							this.mc_bild._visible = 100;
							this.mc_bild._width = 50;
							this.mc_bild._height = 50;
							pausgabe = "";
							this._parent._parent.ausgabe.text += "Prozent="+prozent+"\n";
							this._parent._parent.ausgabe.text += "Gesamt="+gesamt+"\n";
							this._parent._parent.ausgabe.text += this.mc_bild+":Sichtbar="+this.mc_bild._visible+"\n";
							//--------------------------
							this.geladen = 1;
							this.effeckt.gotoAndPlay("aus");
							this.balken_mc._visible = 0;
							this.warte_txt = "";
							var enable = 0;
							//--------------------------
							delete this.onEnterFrame;
						}
					}
				};
				//
				//
				this.mc_thumbs[nName].onRollOver = function() {
					if (this.geladen == 1) {
						_root.song2.start();
						this._parent._parent.bildName = this.bildname;
						this.onEnterFrame = function() {
							this.zeit++;
							this._height = pW+this.zeit*3;
							this._width = pB+this.zeit*3;
							this._x -= this.zeit-1;
							this._y -= this.zeit-1;
							if (this.zeit>3) {
								delete this.onEnterFrame;
							}
						};
						this.swapDepths(k++);
						toolStart();
						this.mc_bild.play();
						//
						this.effeckt.gotoAndPlay("an");
					}
				};
				this.mc_thumbs[nName].onRollOut = function() {
					if (this.geladen == 1) {
						//scale bilder klein 
						this.onEnterFrame = function() {
							this.zeit--;
							this._width = pB+this.zeit*3;
							this._height = pW+this.zeit*3;
							this._x += this.zeit;
							this._y += this.zeit;
							if (this.zeit<1) {
								delete this.onEnterFrame;
								this.zeit = 0;
								this._width = pB;
								this._height = pW;
								this._x = this.TposX;
								this._y = this.TposY;
							}
						};
						//
						this.effeckt.gotoAndPlay("aus");
						toolStop();
						this.mc_bild.gotoAndStop(1);
					}
				};
				this._parent._parent.toolTip.onMouseMove = function() {
					updateAfterEvent();
				};
				// bilder gross laden
				this.mc_thumbs[nName].onRelease = function() {
					if (this.geladen == 1) {
						autor = this.autor;
						bildname = this.bildname;
						bildNr += "BildNummer "+this.nr;
						bildInfo = this.beschreibung;
						pix = this.pix;
						this._parent._parent.pixGross(pix, autor, bildname, bildNr, bildInfo);
					}
				};
			} else {
				if (j<pR) {
					j++;
					i = 0;
				}
			}
		} else {
			delete this.onEnterFrame;
		}
	};
}
:
 
Hi,

hmm, was genau ist nun das Problem?

Du hast da zugegebenermaßen ein recht langes und unübersichtliches Script, von daher fällt es mir (ohne die gesamte Datei vorliegen zu haben) nicht leicht, alles Zeile für Zeile durchzugehen und mir darüber Klarheit zu verschaffen, was genau passiert.

Das Vorladen der Bilder scheint jedenfalls nun zu funktionieren...

Soweit ich das überblicken kann, geht es darum, Thumbnails in diese kleinen Kästchen zu laden und einige Details zu den Bildern anzuzeigen. Mir ist nicht ganz klar, warum Du dafür eine "Unterbrechung" in der Schleife benötigst - ich mache das meistens so:
  • Thumbnail-Holder in einer Schleife instanzieren und plazieren

  • den Holdern die Bild-URL übergeben

  • sobald ein Holder sein Bild komplett geladen hat, wird auf der Übergeordneten Ebene (dort wo sich die Holder befinden) eine Funktion aufgerufen, die eine Variable hochzählt

  • Sobald der Wert dieser Variable dem Gesamtwert der Bilder entspricht, weiß ich, dass alle Bilder vorgeladen wurden, und kann weitermachen.

Gruß
.
 
Ok das versteh ich das mein script evt paar meter zu lang ist und das sicher niemand lust hat das ganze ding ohne die Datei abzuarbeiten. Da das aber nur ein kleiner Teil vom kompletten script ist und die ganze Datei hochzuladen wäre kaum möglich da viele xml daten bilder usw noch dazu benötigt werden.

Ich kürze jetzt den Script auf das absolut Wesentliche.

Also mein Vorhaben ist, dass alle Bilder die sich in der ausgewählten kategorie befinden
geladen werden und als kleine Thumbnails gescaled werden. (evtl lade ich später nur kleine Bilder und erst wenn man ein Thumbnail anklickt das Endsprechende in groß.)

Die einzelnen Bilder sollen nacheinander geladen werden also erst wenn prozent>=100.
(was offline prima funktioniert)

Das Problem ist wenn die Abfrage "gesamt > 0" im script steht wird nur ein Thumbnail-halter geladen und kein Bild.

Wenn ich die Abfrage "gesamt > 0" weglasse werden meistens alle halter geladen aber die Bilder sind meistens nicht sichtbar, also extrem Buggy.

Ich habe den Preeloader in eine onEnterFrame function verschachteln das es den oberen teil vom Script nicht ständig durchleuft, aber anscheinend functioniert das serverseitig nicht korekt.

Das Problem sind wohl die Variablen und das der preeloder nicht richtig in einer onEnterFunction verschachtelt ist. ---> ab // Preview-Preloader

PS: du hast warscheinlich meine Seite aufgerufen wo ich verschiedene Script Varianten hochgeladen habe.


Ich hoffe der Script ist so ein wenig übersichtlicher.


PHP:
// Tabelle setzen
function tabelle(posX, posY, anzahl) {
	this.attachMovie("mc_thumbs", "mc_thumbs", 4);
	mc = new Array();
	mc = anzahl;
	var i = 0;
	var k = 0;
	var j = 0;
	var enable = 0;
	this.onEnterFrame = function() {
		if (k<anzahl) {
			nName = "clip"+k;
			if (i<pS) {
				this.mc_thumbs.attachMovie("contclip", nName, k);
				this.mc_bild[nName].mc_bild._visible = 0;
				this.mc_thumbs[nName].geladen = 0;
				this.mc_thumbs[nName]._width = this.pB;
				this.mc_thumbs[nName]._height = this.pW;
				this.mc_thumbs[nName]._x = i*(this.pB+this.abst);
				this.mc_thumbs[nName]._y = j*(this.pW+this.abst);
				this.mc_thumbs[nName].TposX = this.mc_thumbs[nName]._x;
				this.mc_thumbs[nName].TposY = this.mc_thumbs[nName]._y;		
this.mc_thumbs[nName].pix=ein_xml.firstChild.childNodes[k].attributes.pic;						this.mc_thumbs[nName].mc_bild.loadMovie(mein_xml.firstChild.childNodes[k].attributes.pic);
				
				ausgabe.text+="Bild="+mein_xml.firstChild.childNodes[k].attributes.pic+"\n";
				//
				// Preview-Preloader 
				this.mc_thumbs[nName].onEnterFrame = function() {
					var gesamt = this.mc_bild.getBytesTotal();
					var bereits = this.mc_bild.getBytesLoaded();
					if (gesamt > 0) {
						var prozent = bereits*100/gesamt;
						balken_mc._width = prozent*0.45;
						var pausgabe = int(this.prozent)+"%";
						if (prozent>=100) {
							k++;
							i++;
							this.mc_bild._visible = 100;
							this.mc_bild._width = 50;
							this.mc_bild._height = 50;
							delete this.onEnterFrame;
						}
					}
				};
				
				
				
			} else {
				if (j<pR) {
					j++;
					i = 0;
				}
			}
		} else {
			delete this.onEnterFrame;
		}
	};
}
 
Hi,

warum so kompliziert?

Ich hab mal schnell was zusammengebaut, was (hoffentlich) Deinem Vorhaben in etwa entspricht. Du stößt im Prinzip nur den Ladevorgang des ersten Thumbnail-Holders an und dieser löst das Laden des jeweils nächsten aus, indem er die entsprechende Funktion im Hauptscript aufruft (siehe Anhang);

Gruß
.
 

Anhänge

DANKE

Ich glaube ich habe neigungen zu komplizierten Lösungen.
Ich werd mich mal in deinen Script einarbeiten und versuchen das xml fähig zu machen.
greatz
 
Zurück