Liste mit Slideeffekt

Denniz

Erfahrenes Mitglied
Hi Leute,

ich habe eine Liste gebaut.
Die Listeneinträge lese ich über ein XML aus.
Danach werden diese in jeweilige mc's plaziert.

Code:
_level0._list_mc.listText_mc0
_level0._list_mc.listText_mc1
_level0._list_mc.listText_mc3
usw..
Über "_level0._list_mc" liegt desweiteren eine Maske damit nur 3 Einträge sichtbar sind.

Soweit ist alles ok, jetzt hätte ich gerne einen Slideeffekt eingebaut und habe hierbei zwei Probleme:
1.
Also es gibt neben der Liste einen Up und einen Down button.
Wenn man den Up button drückt sollen sich die angezeigten Einträge um eine Postition nach oben verschieben so das der vorherige oberste Eintrag nicht mehr sichbar ist und der vorherige zweite Eintrag an die erste Position rutsch.Der vorherige dritte Eintrag rutsch an zweiter stelle, usw...
Genau das gleiche soll auch für das betätigen des Down Buttons gelten nur das die Elemente nach unten statt nach oben wanderen.

2.
Die Einträge sollen in der Endloscheife angezeigt werden d.h. es sollen immer 3 Einträge sichtbar ein.
Wenn zB Link4 und Link5 an oberster stelle stehen soll an unterster stelle wieder Link1 sichtbar sein.

Ein ähnliches Bsp. sieht man wenn man auf die alte Seite von group94 geht und dann auf -->Menu -->Projects --> und dann auf den letzten Eintrag in der liste wählt.

Ich habe hier meine datei hochgeladen.
Das skript ist soweit ok , mir fehlen nur noch die genannten Funktionen für den Up- & Down button.

Wäre klasse wenn jemand drüberschauen könnte und mir sagen könnte wie ich es realisieren kann, oder wenn jemand eine FLA mit diesem Effekt hat wäre ich sehr dankbar.

Gruß

Mein AS:
PHP:
import com.xfactorstudio.xml.xpath.*;
function goListe(pListe) {
	var _listvalue_arr:Array = new Array();
	function readXML() {
		var oXML:XML = new XML();
		oXML.ignoreWhite = true;
		oXML.load(pListe);
		oXML.onLoad = function(ok) {
			if (ok) {
				_listvalue_arr = XPath.selectNodesAsString(this.firstChild, "//node/@value");
				createList();
			}
			else {
				trace("ERROR LOADING XML");
			}
		};
	}
	function createList() {
		var _listMask = _root.attachMovie("listMask", "listMask", 9910, {_x:Math.floor((Stage.width/2)+20), _y:Math.floor((Stage.height/2-250)+40)});
		var _list_mc = _root.createEmptyMovieClip("_list_mc", 9900);
		_list_mc._x = Math.floor((Stage.width/2)+20);
		_list_mc._y = Math.floor((Stage.height/2-250)+40);
		_listMask._width = 130;
		_listMask._height = 50;
		_listMask._alpha = 30;
		_list_mc.setMask(_listMask);
		var my_fmt:TextFormat = new TextFormat();
		my_fmt.font = "font1";
		//my_fmt.size = 8;
		my_fmt.color = 0x000000;
		for (i=0; i<_listvalue_arr.length; i++) {
			var _listText_mc = _list_mc.createEmptyMovieClip("listText_mc"+i, 1+i);
			var _listText = _listText_mc.createTextField("listText", 1+i, 0, 0, 100, 100);
			_listText.embedFonts = true;
			_listText.autoSize = true;
			_listText.multiline = false;
			_listText._y = i*15;
			_listText.text = _listvalue_arr[i];
			_listText.border = false;
			_listText.selectable = false;
			_listText.setTextFormat(my_fmt);
			_listText_mc._idx = i;
			_listText_mc.onPress = buttonClicked;
		}
		//trace(_listvalue_arr);
	}
	function buttonClicked() {
		trace(this);
	}
	function setArrows() {
		var upArrow = _root.attachMovie("arrow_up", "arrow_up", 10, {_x:Math.floor((Stage.width/2)+210), _y:Math.floor((Stage.height/2-250)+130)});
		var downArrow = _root.attachMovie("arrow_down", "arrow_down", 15, {_x:Math.floor((Stage.width/2)+180), _y:Math.floor((Stage.height/2-250)+130)});
		upArrow.onPress = goUp;
		downArrow.onPress = goDown;
		/*
		/*Was muß in diesen Funktionen stehen damit die Liste hoch und runter geht
		/*Es sollen immer 3 Links zu sehen sein.
		*/
		function goUp() {
		}
		function goDown() {
		}
	}
	setArrows();
	readXML();
}
goListe("liste.xml");
 
Hallo,

:O Da sind ja null Kommentare, einzelne Blöcke sind nicht durch Absätze abgetrennt, Variablennamen mit _ am Anfang deuten auf Flash-Eigenschaften hin und nicht auf Movieclips oder gar eigene Variablen. Was für eine Arbeit, sich da durchzuarbeiten.

Naja, durch den Aufbau deiner Liste kann man ganz einfach so scrollen:
Code:
function goUp() {
	_list_mc._y -= 15;
}
function goDown() {
	_list_mc._y += 15;
}

Für den wederkehrer-Effekt habe ich in der for-Schleife zum initialisieren der Textfelder folgende Modifikationen vorgenommen:

Code:
for (i=0; i<_listvalue_arr.length*2; i++) {
			var _listText_mc = _list_mc.createEmptyMovieClip("listText_mc"+i, 1+i);
			var _listText = _listText_mc.createTextField("listText", 1+i, 0, 0, 100, 100);
			_listText.embedFonts = true;
			_listText.autoSize = true;
			_listText.multiline = false;
			_listText._y = i*15;
			if(i < _listvalue_arr.length) {
				_listText.text = _listvalue_arr[i];
			} else {
				_listText.text = _listvalue_arr[i-_listvalue_arr.length];
			}
			_listText.border = false;
			_listText.selectable = false;
			_listText.setTextFormat(my_fmt);
			_listText_mc._idx = i;
			_listText_mc.onPress = buttonClicked;
		}

Durch diese Modifiationen werden alle Einträge zweimal erstellt, dann kann man sobald die "zweiten" ersten drei Einträge angezeigt werden die ersten ersten drei Einträge anzeigen, ohne dass der Benutzer das merkt:

Code:
function goUp() {
			if(_list_mc._y == (Math.floor((Stage.height/2-250)+40))-(15*(_listvalue_arr.length-1))) {
				_list_mc._y = (Math.floor((Stage.height/2-250)+40));
			} else {
				_list_mc._y -= 15;
			}
		}
		function goDown() {
			if(_list_mc._y == Math.floor((Stage.height/2-250)+40)) {
				_list_mc._y = Math.floor((Stage.height/2-250)+40) - ( 15*(_listvalue_arr.length-1) );
			} else {
				_list_mc._y += 15;
			}
		}

Liebe Grüße,
B.
 
Hi Jens,

vielen dank schonmal, so in etwa hab ich mir es vorgestellt, die Idee die mc's zweimal zu erstellen ist genial.

Da gibts noch paar Features die ich noch einbauen will, ich probiere deshalb hier noch etwas 'rum, wenn ich nicht weiterkomme melde ich mich dann nochmal :)

Thx und gruß
 
Zurück