"intelligenter" Preloader

spirou25

Mitglied
Hi

Ich möchte folgendes machen:

Ausgangslage sind mehrere swf-Dateien. Nun möchte ich die erste laden und während dem einen Preloaderbalken (oder ähnliches, Prozentangabe....) anzeigen. Ist die erste swf geladen kann sich der Benutzer schon mal beschäftigt, indem er die ersten Seiten der Website anschaut. Währenddem soll im Hintergrund bereits die nächste swf-Datei geladen werden. Das wäre sozusagen der 2. Teil der Website.

Da ich sowas noch nie gemacht habe, bitte ich euch, mir zuerst eine oberflächliche Idee zu geben und noch nicht allzu sehr im Detail fokusiert zu sein.

vielen Dank und liebe Grüsse
Adrian
 
Hi,

das dürfte in etwa folgendes sein:
Code:
var movie = new Array("film1.swf", "film2.swf", "film3.swf"); // Deine Filme / Dateien

var container = new Array();

for (var i=0; i<movie.length; i++) {
	var d = this.getNextHighestDepth();
	container[i] = this.createEmptyMovieClip("container_" + i, d);
	container[i]._visible = false;
	container[i]._src = movie[i]; // Quelle
	container[i].idx = i; // Index
	container[i]._status = 0; // Status: 0 = nicht geladen, 1 = Ladevorgang, 2 = komplett geladen
	container[i].doplay = false; // Soll der Film nach dem Laden angezeigt werden?
	container[i].ct = container[i].createEmptyMovieClip("ct", 1); // innerer Container
}

function preloadMovie(idx, doplay) { // lädt einen Film vor
	var obj = container[idx];
	if (obj._status == 1) {
		this.doplay = doplay;
	} else if (obj._status == 2) {
		preloadMovie(idx + 1, false);
		this.doplay = doplay;
		if (doplay) displayMovie(idx);
	} else {
		obj.doplay = doplay;
		obj.ct.loadMovie(obj._src);
		obj._status = 1;
		obj.onEnterFrame = function() {
			var cur = this.ct.getBytesLoaded();
			var max = this.ct.getBytesTotal();
			if (cur > 10 && max > 10) {
				var percent = cur * 100 / max;
				trace(parseInt(percent, 10) + " % geladen");
				if (percent >= 100) {
					delete this.onEnterFrame;
					this._status = 2;
					preloadMovie(idx + 1, false);
					if (this.doplay) displayMovie(idx);
				}
			}
		}
	}
}

function showMovie(idx) { // lädt einen Film und zeigt ihn anschließend an
	preloadMovie(idx, true);
}

function displayMovie(idx) { // blendet einen Film ein und alle anderen aus
	for (var i=0; i<container.length; i++) {
		container[i]._visible = (container[i].idx == idx);
	}
}

showMovie(0); // lädt den ersten Film, zeigt ihn an und lädt dann die folgenden progressiv nach

Gruß
.
 
Hi

1. Frage:
Wie muss ich nun mit deinem Code umgehen? Ich habe folgende Idee:

Ich mache eine neue fla-Datei und füge deinen Code im ersten Bild ein. Auch einen Movieclip eines Preloaderbalken füge ich in dieser Datei ein. Das Ganze speichere ich als swf-Datei (sagen wir Preloader.swf) Von dieser Datei aus startet man.

ist das so machbar?

2. Frage:
Steuert man den Preloaderbalken mit der Variablen d in Zeile 6?

lg
 
Hi,

Steuert man den Preloaderbalken mit der Variablen d in Zeile 6?
Nein, dies ist nur die Tiefenebene, auf der die Container angelegt werden.

Den Balken kannst Du innerhalb der Methode "preloadMovie" mit der Variablen "percent" ansteuern (dort, wo jetzt die trace-Aktion steht), z.B.:
Code:
var percent = cur * 100 / max;
ladebalken._xscale = percent;

Gruß
.
 
ok, mit pröbeln sollte ich Punkt 2 hinkriegen. Und was meinst du zu Frage 1? Mir ist einfach Grundsätzlich noch nicht klar, wie ich das Ganze anstellen muss. Bis jetzt habe ich immer im gleichen Film gearbeitet und den anschliessend in ein HTML eingebaut. Mit mehreren swf-Dateien zu arbeiten ist für mich Neuland. Für einen kurzen Stichwortartigen Beschrieb der Vorgehensweise wäre ich sehr dankbar.

Gruess,
Adrian
 
Zuletzt bearbeitet:
Hi,

je nach Gusto und Einsatzzweck sind verschiedene Herangehensweisen geeignet.

So wie Du es beschrieben hast, klingt es schon sinnvoll - wobei ich Dein Projekt natürlich nicht kenne.

Wenn Du hier im Forum mit den Begriffen "Preloader", "externer Preloader", "Multiloader", "loadMovie" etc. suchst, solltest Du viele Beispiele und Vorlagen finden, die Dir nützlich sein können.

Gruß
.
 

Neue Beiträge

Zurück