Button lädt nur einen Befehl?!

ponda

Erfahrenes Mitglied
Hallo erneut ihr Profis,

ich hatte letztens schon die Frage gestellt, wie man solch
einen Slider über Mouseover steuert und Ihr habt mir sofort weiterhelfen können.

Nun wollte ich zusätzlich zu diesem Slider noch einen Befehl zu jedem
Button erstellen, wo zusätzlich bei dem Rollover ein MC geladen wird (die kleinen Bilder
unten sollen passend zum button eine höhere deckkraft bekommen und diese Deckkraft
soll bei dem Rollout natürlich wieder runter gehen.)
Dieses Script hab ich auch soweit hinbekommen, jetzt ist nur das Problem, dass
immer nur ein Befehl funktioniert... entweder der Slider, oder das laden des MC...

Versteht ihr, was ich meine ? :)

Hier noch mein Script, vielleicht seht ihr ja einen Fehler:

Code:
var links = new Array(link1, link2, link3, link4, link5, link6, link7, link8); // Array mit den Links
var bilder = new Array(bild1, bild2, bild3, bild4, bild5, bild6, bild7, bild8);

var iv = 0; // Intervalhandler

var distance = 74; // Abstand zwischen den Bildern

var bx = bar._x; // Startposition des Balkens

for (var i=0; i<bilder.length; i++) {
	bilder[i].idx = i + 1;
	bilder[i].onRollOver = function() { // beim rollOver ...
		clearInterval(iv);
		slideTo(this.idx); // .. sofort zur Zielposition bewegen
	}
	bilder[i].onRollOut = bilder[i].onDragOut = function() { // beim rollOut ...
		clearInterval(iv);
		iv = setInterval(slideTo, 250, 0); // .. verzögert zur Startposition bewegen 0=Startposition
	}
}

for (var i=0; i<links.length; i++) {
	links[i].idx = i + 1;
	links[i].onRollOver = function() { // beim rollOver ...
		clearInterval(iv);
		slideTo(this.idx); // .. sofort zur Zielposition bewegen
	}
	links[i].onRollOut = links[i].onDragOut = function() { // beim rollOut ...
		clearInterval(iv);
		iv = setInterval(slideTo, 250, 0); // .. verzögert zur Startposition bewegen 0=Startposition
	}
}

function slideTo(d) { // Balken bewegen
	clearInterval(iv);
	var dx = bx + d * distance;
	bar.onEnterFrame = function() {
		this._x += (dx - this._x) / 4;
		if (Math.abs(dx - this._x) < 1) this._x = dx;
		if (this._x == dx) delete this.onEnterFrame;
	}
}

link3.onRollOut = function() {		// Deckkraft-Funktion
    mc2.onEnterFrame = function() {
        if (this._currentframe == 1) {
            delete this.onEnterFrame;
        } else {
            this.prevFrame();
        }
    };
};
link3.onRollOver = function() {		// Deckkraft-Funktion
    mc2.onEnterFrame = function() {
        if (this._currentframe == this._totalframes) {
            delete this.onEnterFrame;
        } else {
            this.nextFrame();
        }
    };
};
 

Anhänge

  • header.jpg
    header.jpg
    159,8 KB · Aufrufe: 11

ponda

Erfahrenes Mitglied
Hey Tobias,

vielen Dank schonmal für deine Hilfe!
Anbei Ist die Fla-Datei.

LG Dennis
 

Anhänge

  • header2.fla
    96 KB · Aufrufe: 32

Tobias Menzel

Erfahrenes Mitglied
Hi,

Du kannst auf einem Clip kein Mausereignis (rollOver) zweimal definieren. Füge den einzelnen Bildern einfach eine Funktion ("go") für das Fading hinzu, und definiere die Ereignisse dort, wo auch die anderen notiert sind:
Code:
var links = new Array(link1, link2, link3, link4, link5, link6, link7, link8); // Array mit den Links
var bilder = new Array(bild1, bild2, bild3, bild4, bild5, bild6, bild7, bild8);

var iv = 0; // Intervalhandler

var distance = 74; // Abstand zwischen den Bildern

var bx = bar._x; // Startposition des Balkens

for (var i=0; i<bilder.length; i++) {
	bilder[i].idx = i + 1;
	bilder[i].onRollOver = function() { // beim rollOver ...
		clearInterval(iv);
		this.go(true);
		slideTo(this.idx); // .. sofort zur Zielposition bewegen
	}
	bilder[i].onRollOut = bilder[i].onDragOut = function() { // beim rollOut ...
		clearInterval(iv);
		this.go(false);
		iv = setInterval(slideTo, 250, 0); // .. verzögert zur Startposition bewegen 0=Startposition
	}
	bilder[i].go = function(d) {
		this.onEnterFrame = function() {
			if (d) {
				if (this._currentframe < this._totalframes) {
					this.nextFrame();
				} else {
					delete this.onEnterFrame;
				}
			} else {
				if (this._currentframe > 1) {
					this.prevFrame();
				} else {
					delete this.onEnterFrame;
				}
			}
		}
	}
}

for (var i=0; i<links.length; i++) {
	links[i].idx = i + 1;
	links[i].onRollOver = function() { // beim rollOver ...
		clearInterval(iv);
		bilder[this.idx - 1].go(true);
		slideTo(this.idx); // .. sofort zur Zielposition bewegen
	}
	links[i].onRollOut = links[i].onDragOut = function() { // beim rollOut ...
		clearInterval(iv);
		bilder[this.idx - 1].go(false);
		iv = setInterval(slideTo, 250, 0); // .. verzögert zur Startposition bewegen 0=Startposition
	}
}

function slideTo(d) { // Balken bewegen
	clearInterval(iv);
	var dx = bx + d * distance;
	bar.onEnterFrame = function() {
		this._x += (dx - this._x) / 4;
		if (Math.abs(dx - this._x) < 1) this._x = dx;
		if (this._x == dx) delete this.onEnterFrame;
	}
}

Übrigens: Wenn es sich nur um eine einfache Alphaüberblendung handelt, brauchst Du in den Bildern dafür keine Zeitleiste mit Tweening. Ein Deckkraft-fading lässt sich mit 2-3 Zeilen Code auf jedem MC anwenden.

Gruß
.