bilderleiste_fx erweitern

flashsi

Erfahrenes Mitglied
Hallo zusammen,

viellicht könnt Ihr mir weiterhelfen.

Ich habe mir bilderleiste_fx besorgt und in mein Projekt eingearbeitet. Es funktioniert auch alles. Nun hätte ich aber gerne, dass die slideshow nicht gleich losläuft, sondern auf dem ersten Bild für ein paar Sekunden stehen bleibt und dann erst losläuft. Und zwar erstmal nach links und in einer bestimmten Geschwindigkeit. Habe nämlich zwischen den Fotos Texte eingebaut, die man nach und nach lesen soll. Trotzdem soll man dann mit der Mouse links und rechts navigieren können.
Vielleicht ein wenig komplex, aber vielleicht auch hinkriegbar.

Anbei das Script im Original.

Vielen Dank schon mal.
 
Hi,

  • markiere die Maskenform (Ebene "mask" im MC "slideshow"), wandele sie in einen MovieClip um, und gib ihr den Instanznamen "mask". Wir brauchen nämlich einen MovieClip in Größe des Fensters, um zu überprüfen, ob sich die Maus in diesem Bereich befindet.

  • Ändere den Code (Ebene "code" im MC "slideshow") folgendermaßen ab:
Code:
var speed = 0;
var maxspeed = 8;
var damper = 10;
var gap = 30;

var leiste = new Array(2);

leiste[0] = container.attachMovie("bilderleiste", "leiste0", 1);
leiste[1] = container.attachMovie("bilderleiste", "leiste1", 2);

leiste[1]._x = leiste[0]._x + leiste[0]._width + gap;

var iv = setInterval(this, "go", 3000); // erst nach 3 Sekunden starten

function go() { // hier starten
	clearInterval(iv);
	this.onEnterFrame = function() {
		if (mask.hitTest(_root._xmouse, _root._ymouse, false)) { // wenn Maus über der Leiste ...
			speed =  -(_xmouse - frame._width / 2) / damper; // Mit Maus steuern
		} else { // ansonsten ...
			speed += (-2 - speed) / 5; // langsam nach links
		}
		if (speed < -maxspeed) speed = -maxspeed;
		if (speed > maxspeed) speed = maxspeed;
		for (var i=0; i<leiste.length; i++) {
			leiste[i]._x += speed;
		}
		for (var i=0; i<leiste.length; i++) {
			if ((leiste[i]._x > frame._width) && speed > 0) moveLeft(i);
			if ((leiste[i]._x < -leiste[i]._width - gap) && speed < 0) moveRight(i);
		}
	}
}

function moveLeft(x) {
	if (x == leiste.length - 1) {
		leiste[x]._x = leiste[0]._x - leiste[x]._width - gap;
	} else {
		leiste[x]._x = leiste[x + 1]._x - leiste[x]._width - gap;
	}
}

function moveRight(x) {
	if (x == 0) {
		leiste[x]._x = leiste[leiste.length - 1]._x + leiste[leiste.length - 1]._width + gap;
	} else {
		leiste[x]._x = leiste[x - 1]._x + leiste[x - 1]._width + gap;
	}
}

Diese Zeile:
Code:
var iv = setInterval(this, "go", 3000);
bestimmt die Verzögerung, nach der die Bewegung beginnen soll (zweiter Parameter in Millisekunden).

Gruß
.
 
Vielen Dank!

Das funktioniert schon super. Wie bekommt man es nur noch hin, das die slideshow erst mal ein paar sekunden nach links fährt, egal ob die Mouse drüber ist oder nicht.
 
Hi,

so:
Code:
var speed = 0;
var maxspeed = 8;
var damper = 10;
var gap = 30;
var _mode = false;

var leiste = new Array(2);

leiste[0] = container.attachMovie("bilderleiste", "leiste0", 1);
leiste[1] = container.attachMovie("bilderleiste", "leiste1", 2);

leiste[1]._x = leiste[0]._x + leiste[0]._width + gap;

var iv = setInterval(this, "go", 3000); // erst nach 3 Sekunden starten

function mouseMode() {
	clearInterval(iv);
	_mode = true; // Maussteuerung aktivieren
}

function go() { // hier starten
	clearInterval(iv);
	iv = setInterval(this, "mouseMode", 3000); // nach 3 Sekunden auf Maus reagieren
	_mode = false; // Maus-Modus
	this.onEnterFrame = function() {
		if (_mode && mask.hitTest(_root._xmouse, _root._ymouse, false)) { // wenn Maus über der Leiste ...
			speed =  -(_xmouse - frame._width / 2) / damper; // Mit Maus steuern
		} else { // ansonsten ...
			speed += (-2 - speed) / 5; // langsam nach links
		}
		if (speed < -maxspeed) speed = -maxspeed;
		if (speed > maxspeed) speed = maxspeed;
		for (var i=0; i<leiste.length; i++) {
			leiste[i]._x += speed;
		}
		for (var i=0; i<leiste.length; i++) {
			if ((leiste[i]._x > frame._width) && speed > 0) moveLeft(i);
			if ((leiste[i]._x < -leiste[i]._width - gap) && speed < 0) moveRight(i);
		}
	}
}

function moveLeft(x) {
	if (x == leiste.length - 1) {
		leiste[x]._x = leiste[0]._x - leiste[x]._width - gap;
	} else {
		leiste[x]._x = leiste[x + 1]._x - leiste[x]._width - gap;
	}
}

function moveRight(x) {
	if (x == 0) {
		leiste[x]._x = leiste[leiste.length - 1]._x + leiste[leiste.length - 1]._width + gap;
	} else {
		leiste[x]._x = leiste[x - 1]._x + leiste[x - 1]._width + gap;
	}
}

Gruß
.
 
Funktioniert perfekt!
Super. Vielen Dank.


Noch eine Sache: wenn ich davor einen Preloader schalte, denn es sind ein paar Bilder, dann fängt das immer wieder von vorne an, also der Preloader ist fertig und springt vom ersten Bild des Slides wieder auf den Preloader anfang. Irgendwo muss da ein stop hin. Weiss aber nicht wo.
 
Guten Mokrgen.
Hier nun die Leiste mit Preloeader.
Mir ist aufgefallen, dass der Preloader AS1 ist und den Player6 hat. Die Slideshow aber AS2 und Player8. Habe eine Variable deklariert, dx. Damit läuft er zumindest. Nicht ganz, wie es sollte, aber immerhin.
Aber das ganze springt immer wieder zum Anfang.

Schöne Grüsse
 

Anhänge

Zurück