XML und Statusanzeige

mardazad

Erfahrenes Mitglied
Tach allerseits,

ich habe mir im Schweiße meines Angesichts folgenden Code zusammmengeklaubt, -und schraubt :
PHP:
fscommand("allowScale",false);
System.useCodepage=true;

leer_mc._y=balkenmaske._y;
leer_mc.attachMovie("higrubalken", "higrubalken", 1);
leer_mc.higrubalken.setMask(balkenmaske);
leer_mc.swapDepths(1);


function xmlGo(){ //wird aufgerufen wenn der higrubalken im letzten frame angekommen ist
	
mein_xml = new XML();
mein_xml.ignoreWhite = true;
mein_xml.load("bildergallerie.xml");

mein_xml.onLoad = function(status) {
	if (status) {
		
		news_xml = mein_xml.firstChild.childNodes;
		delete mein_xml;
		initNavigation();
		setListe();
		ersteNews();
	}
	
	};
}


function ersteNews() {
	attachMovie("detailclip","clip_mc", 0);
	clip_mc._x = 0;
	clip_mc._y = 0;	
	clip_mc.titel_txt.htmlText = html_texthighlight + news_xml[0].attributes.titel + "</font>";
	clip_mc.bild = news_xml[0].firstChild.attributes.bild;
	clip_mc.inhalt_txt.htmlText = html_fliesstextfarbe + news_xml[0].firstChild.firstChild.nodeValue + "</font>";
}

function setListe() {
	var j = 2; //setzt attach movie(..., j++) auf die höchsten level
	for (i=aktAnzeige; i< maxAnzeige;i++) {	
			nName = "newsclip" + j;
			attachMovie("newsclip", nName, j++);
			
			if (wo == undefined){ //setzt zu beginn die statusanzeige auf den ersten thumb
				statusFunktion(1);
			}
			
		if (news_xml[i] != undefined) {			
			this[nName]._y = 340;
			this[nName]._x = 110 + this[nName]._width * j * 1.19; //thumbposition

			
			this[nName].thumb_mc.loadMovie(news_xml[i].firstChild.attributes.thumb);
			
			this[nName].nr_txt.text = i + 1;
			this[nName].titel_txt.text = news_xml[i].attributes.titel;
			this[nName].useHandCursor = false;
			this[nName].onRelease = function() {
				
				attachMovie("detailclip","clip_mc",0);
				clip_mc._x = 0;
				clip_mc._y = 0;
				daten = news_xml[this.nr_txt.text-1];
				
				statusFunktion(daten.attributes.nummer); //daten.attributes.nummer liest die nummerierung aus dem xml aus
				
				clip_mc.titel_txt.htmlText = html_texthighlight + daten.attributes.titel + "</font>";
				clip_mc.bild = daten.firstChild.attributes.bild;
				clip_mc.inhalt_txt.htmlText = html_fliesstextfarbe + daten.firstChild.firstChild.nodeValue + "</font>";
			}
		} else {		
			this[nName].removeMovieClip();			
		}
	}
	if (anzahl <= aktAnzeige+max) {
		anzeige_txt.text = (aktAnzeige+1) + " / " + anzahl;
	} else if (anzahl != 0) {
		anzeige_txt.text = (aktAnzeige+1) + " / " + (aktAnzeige+max);
	} 
	if (anzahl == 0) {
		anzeige_txt.text = "0 / 0";
	}
	gesamt_txt.text = "Gesamt: " + anzahl;
}


function statusFunktion (wo){
	
	wer=parseInt(wo); //wo wird von setliste übergeben, der wert ist "nummer" aus dem xml-doc
	wer++; //warum auch immer?!
	suchclip = "newsclip" + wer; 
	
	var inaktiv = new Array (anzahl); // = wieviele einträge im xml-doc ?
	
	for (var m = 0; m < inaktiv.length; m++){
		
		rausclip= "newsclip" + m;
		if (m != wer && this[rausclip].status._currentframe > 1){
			this[rausclip].status.gotoAndPlay(11);
		}
		
		if (m == wer && this[suchclip].status._currentframe >= 11){
			this[suchclip].status.gotoAndStop(10);
		}
	}
	

	if (this[suchclip].status._currentframe != 10) {
		this[suchclip].status.play();
		}

		
		if (wo == 1 && gehts == undefined){
		gehts = 2; //irgendwas
		this[suchclip].status.gotoAndStop(10);
	}
	
		}


butVor.useHandCursor = false;
butZuruck.useHandCursor = false;


// Vor-Zurück
// Anzahl der Menüclips ermitteln

function initNavigation() {
	anzahl = news_xml.length;
	max = 6;
	maxAnzeige = 6;
	aktAnzeige = 0;
}



// Schaltflächen
butVor.onRelease = function() {
	if (aktAnzeige < anzahl-max) {
	j=0;
	aktAnzeige += max;
	maxAnzeige += max;
	setListe();
	}
}

butZuruck.onRelease = function() {
	if (aktAnzeige > 1) {	
	j=0;
	aktAnzeige -= max;
	maxAnzeige -= max;
	setListe();
	}
}

es funktioniert erstaunlicherweise auch wunderbar. Lediglich die Statusanzeige im MC "newsclip" mit dem Instanznamen "status" (einfach ein Alphatween, der in Frame 10 voll deckt, ab 11 wieder transparent wird) hat Macken.
Im Startscreen haut alles so hin, wies sollte aber wenn über die Buttonfunktionen vor,- und wieder zurückgeblättert wird, ist die Statusanzeige nicht zu sehen. Wenn also bspw. zu Beginn Thumb1 als aktiv angezeigt wird und ich dann die Vorwärtsblättern-Funktion aufrufe, dann die Rückwärtsblättern-Funktion, ist Thumb1 nicht mehr als aktiv gekennzeichnet, obwohl der entsprechende "detailclip'" noch zu sehen ist.
Außerdem geht die Statusanzeige nur für die Bilder 1bis6, nach dem Blättern scheint statusFunktion außer Betrieb gesetzt?!

Der Wurm scheint ja garnicht so groß zu sein, aber meine XML-Skills reichen leider noch nicht aus...

Danke schonmal
 
Hallo, das Script sieht interessant aus, auch wenn es zusammmengeklaubt ist.

Kannst du mir genau erklären wozu es gut ist, dann könnte ich es auch benutzen?

Ich habe selber nicht so viel Ahnung und sehe nicht auf Anhieb was damit passiert.
 
Hi,
es ist eine ganz normale Bildergallerie. Die Funktion setListe lädt und platziert die Thumbs und die Funktion ersteNews sorgt dafür, daß von Beginn an das Bild zum ersten Thumb attached wird. Aufgerufen wird das ganze diurch xmlGo.
Nach diesem Script werden immer 6 Thumbs/Seite dargestellt und über die Schaltflächen kann man Blättern...
 
Noch nicht. Sorry, habe momentan keine Zeit einen Dummy zu basteln. Ab Mitte/ Ende nächster Woche kannst du mich gerne nochmal daran erinnern, dann poste ich einen...


Kann mir niemand helfen?
 
Hi,

es ist schwer (zumindest mühselig), einen nackten Code "freihändig" zu debuggen. Wenn Du die .fla posten könntest, wäre das daher sehr hilfreich. Ein Fehler kann sich an vielen Stellen verbergen, falsche Pfade, Klammerung, Trunctations, Vertipper in Bezeichnern, Logikfehler. Mit ein paar trace-Aktion ist der Übeltäter in der Regel schnell eingekreist.

Gruß
.
 
Hi,
ich hab mal die Daten angehängt. Die Gallerie liegt im MC "content4"...

Bitte hier downloaden

@Datic:
abgesehen von der Statusanzeige habe ich ein paar erfolglose Versuche gemacht, diesen Code auf die Gallerie umzumünzen (den hattest du mir geschrieben). Ich habe versucht "detailclip" nicht an die Bühne zu attachen, sondern an zwei leere MC und dann mit swapDepths zu arbeiten. Dein Code sorgte für die Überblendung zweier Galleriebilder während der Text ganz aus,- dann der neue wieder einblendet. Irgendwie hab ichs aber nicht hingekriegt, weißt du da Rat?

PHP:
stop();
var current_ct = 1;

img_ct1._alpha = img_ct2._alpha = txt_ct._alpha = 0;

function setContent(nr) {
	var old_ct = current_ct;
	current_ct = (current_ct == 1) ? 2 : 1;
	
	// Text ausblenden:
	txt_ct.onEnterFrame = function() {
		var tcta = this._alpha;
		this._alpha += (0 - this._alpha) / 5;
		if (tcta == this._alpha) textIn(nr); // Einblenden
	}
	
	// Altes BIld ausblenden:
	this["img_ct" + old_ct].onEnterFrame = function() {
		var octa = this._alpha;
		this._alpha += (0 - this._alpha) / 10;
		if (octa == this._alpha) {
			this.img.removeMovieClip();
			delete this.onEnterFrame;
		}
	}
	// Neues Bild instanzieren:
	this["img_ct" + current_ct].attachMovie("pic" + nr, "img", 1);
	// Neues Bild einblenden:
	this["img_ct" + current_ct].onEnterFrame = function() {
		var ncta = this._alpha;
		this._alpha += (100 - this._alpha) / 10;
		if (ncta == this._alpha) {
			this._alpha = 100;
			delete this.onEnterFrame;
		}
	}
}

function textIn(nr) {
	txt_ct._alpha = 0;
	// Neuen Text instanzieren und Einblenden:
	txt_ct.attachMovie("text" + nr, "txt", 1);
	txt_ct.onEnterFrame = function() {
		var tcta = this._alpha;
		this._alpha += (100 - this._alpha) / 10;
		if (tcta == this._alpha) {
			this._alpha = 100;
			delete this.onEnterFrame;
		}
	}
}


Vielen Dank schonmal...
 
Hi,

teils teils - zum einen bin ich erst gestern Abend wieder zuhause eingeflogen und es gibt hier noch ne Menge Kram, den ich nacharbeiten muss. Zum anderen habe ich den Thread heute bisher übersehen.

Das Hauptproblem ist allerdings, dass ich nicht die Zeit habe, mich durch einen recht langen Code zu arbeiten, der nicht allzu leicht zu entziffern ist (so kann ich z.B. mit fast allen Variablenbezeichnern wenig bis nichts anfangen ;) ). Wo dieses "Tweening" steckt, von dem Du sprichst, konnte ich so bislang noch nicht herausfinden, aber ich gehe davon aus, es handelt sich um den kleinen roten Punkt, der das markierte Bild auszeichnet - und das Problem besteht darin, dass der Punkt nur auf der ersten Seite der Thumbnails erscheint?

Grundsätzlich würde ich die einzelnen Thumbnails (sind das die "newsclip"s?) in einem Array ablegen, und jedem eine eigene Funktion zum Ein- und Ausblenden der Statusanzeige verpassen - diese geschachtelte Schleife in der Funktion "statusFunktion" kommt mir recht verdächtig vor... :suspekt:

Ich sag Dir deshalb einfach mal, wie ich rangehen würde, denn es geht um einiges schneller, diese Funktion mal eben neu zu schreiben, als Dein Script zu durchschauen und zu verbessern (das mag nicht jedem so gehen, vielleicht denken wir einfach etwas inkompatibel ;) ):

Nimm mal an, Du hast die Thumbs in einem Array namens "thumbs". Nehmen wir ferner an, jede Thumbnail-Instanz verfügt über einen MC namens "spot", der einen kleinen roten Punkt enthält (geht es Dir garnicht um diesen Punkt, dann ignorier diese Ausführungen einfach und korrigier mich!). Nun verpasst Du jeder einzelnen Instanz eine Funktion zum Einblenden und Ausblenden:
PHP:
for (var i=0; i<thumbs.length; i++) {
    var obj = thumbs[i];
    obj.setStatus = function(flag) {
        var da = (flag)? 100 : 0;
        this.onEnterFrame = function() {
            this.spot._alpha += (da - this.spot._alpha) / 4;
            if (Math.abs(da - this.spot._alpha) < 1) {
                this.spot._alpha = da;
                delete this.onEnterFrame;
            }
        }
    }
}
Nun kanns Du mit einer weiteren Funktion auf der Zeitleiste einen bestimmten Thumbnail aktivieren und gleichzeitig alle anderen deaktivieren:
PHP:
function setStatus(idx) {
    // idx ist die Indexnummer des Thumbnails
    for (var i=0; i<thumbs.length; i++) {
        thumbs[i].setStatus(i == idx);
    }
}

Gruß
.
 
HI Datic,
danke schön. Ich hab allerdings das Problem, daß ich nicht weiß wo ich genau den Code platzieren soll und wie ich die Thumbs aus diesem Script in ein Array kriege?!...

"newsclip" ist ein MC aus der Bibliothek der attached wird und in den die xml-Daten gepackt werden.
"detailclip" s.o. hierein werden die Bilddaten gepackt.


Außerdem wäre es relativ wichtig für mich, die Überblendungen der Contents also detailclips hinzubekommen, so daß nicht alles so abgehackt passiert.
So ähnlich wie im Galleriebereich von carl-de-kayser: http://www.carldekeyzer.com/

Vielleicht weiß jemand ein anderes Tut, das so funktioniert? Welchen Code ich letztlich im Film habe ist mir Wurscht. Nur sollte es ohne Komponenten auskommen, weil ich das Anpassen des Layout noch nicht so ganz gerafft habe und eigentlich nur bis morgen früh Zeit habe...

1000 Dank
 
Zurück