mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 23.09.2017 22:16 Benutzername: Passwort: Auto-Login

Thema: [Flash] Der Versuch an einem Dynamischen Menü vom 03.08.2006


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Multimedia -> [Flash] Der Versuch an einem Dynamischen Menü
Autor Nachricht
Kyuugo
Threadersteller

Dabei seit: 30.01.2006
Ort: Moenchengladbach
Alter: 33
Geschlecht: Männlich
Verfasst Do 03.08.2006 12:58
Titel

[Flash] Der Versuch an einem Dynamischen Menü

Antworten mit Zitat Zum Seitenanfang

So, da meld ich mich mal wieder Lächel

Nach ein paar Tagen Googlesuche habe ich nun so einige Dynamische Menüs gesehn, Tutorials ausprobiert und versucht nachzubauen. Möglichkeiten gibt es ja viele und doch, ein Menü, so wie ich es haben will, habe ich leider gar nicht gefunden. Menno!

Daher habe ich mir nun ein Menü besorgt und so abgeändert, das es Ansatzweise passt, jedoch habe ich immernoch Schwierigkeiten mit der Positionierung der Submenü Buttons beim Rollover und auch ein weiteres Problem, nähmlich will ich ein weiteres SubSubmenü mit einbauen.

Normalerweise sind Menüs ja so aufgebaut, dass wenn man einen Hauptmenüpunkt aktiviert, sich das jeweilige Untermenü direkt unter dem Hauptmenübutton aufbaut und sich die darunter liegenden Hauptmenüpunkte um die länge der Submenüpunkte nach unten verschieben. Ich habe nun 4 Hauptmenüpunkte, jedoch sollen sich die Untermenüs unter den Hauptmenüpunkten, an einer festen Position also aufbauen. Klingt und ist bestimmt weniger kompliziert als die 1. Variante, jedoch bekomme ich es nicht hin...

Hier mal das Script:

Code:
// this array describes the menu.  each 'drop down'
// is an element of the array

var Menus = new Array();
Menus[0] = ["Main Menu #1", "Sub Menu #1a", "Sub Menu #1b", "SubMenu #1c", "SubSubMenu #1a1"];
Menus[1] = ["Main Menu #2", "Sub Menu #2a", "Sub Menu #2b", "SubMenu #2c", "SubMenu #2d", "SubMenu #2e"];
Menus[2] = ["Main Menu #3", "Sub Menu #3a", "Sub Menu #3b", "SubMenu #3c"];
Menus[3] = ["Main Menu #4", "Sub Menu #4a", "Sub Menu #4b", "SubMenu #4c"];

// this array describes what's going to happen
// when you click on a menu.  this example is just
// going to do a 'ContentClip.gotoAndPlay' on whatever's
// referenced here
var Actions = new Array();
Actions[0] = ["main", "sub1a", "sub1b", "sub1c", "subsub1a1"];
Actions[1] = [30, 40, 50, 60, 61, 62];
Actions[2] = [30, 40, 50, 60, 61, 62];
Actions[3] = [30, 40, 50, 60, 61, 62];

// this final array holds the 'state' of our menus
// initially each element is false, but when a
// menu is 'opened' its corresponding element
// here is set to true.  this is used to 'close'
// the menus
var MenuStates = new Array();
for(var i=0; i<Menus.length; i++) MenuStates[i] = false;


// create our menus
// ----------------
// first we have to go through each element
// in the Menus array

// after this loop has finished, our menus
// will physically exist on the movie.
for(var i=0; i<Menus.length; i++)
{
   // create our menu holder clip
   _root.createEmptyMovieClip("Menu" + i, 1500+i);
   
   // create a shortcut reference
   var m = _root["Menu"+i];
   
   // position our menu
   m._x = 0;
   m._y = i * 20;
   
   // store a reference to the 'Menu' element of our button
   m.index = i;   
   
   // create the main button
   m.attachMovie("MainMenu", "Main", 1);
   m.Main._y = 0;
   m.Main._x = 0;   
   m.Main.Label.text = Menus[i][0];
   m.Main.onRollOver = mainover;
   m.Main.onRollOut = up;
   m.Main.onRelease = click;
   
   // store a refernce to the frame we go to when clicked
   m.Main.targetframe = Actions[i][0];   
      
   // now create our submenu buttons
   for(var j=1; j<Menus[i].length; j++)
   {
      // create the button
      m.attachMovie("SubMenu", "Btn" + j, 5+j);
      
      // shortcut reference
      var b = m["Btn"+j];
      
      // set up the properties
      b._y = j *20;
      b._x = 0;   
      b.Label.text = Menus[i][j];
      b.onRollOver = over;
      b.onRollOut = up;
      
      // store a refernce to the frame we go to when clicked
      b.targetframe = Actions[i][j];
      
      // assign our click function
      b.onRelease = click;
      
      // hide our button for now
      b._visible = false;
   }
   
}


// displays a submenu when you hover over a menu
function mainover()
{
   var index = this._parent.index;
   
   // we now need to walk through our Menus array and make the buttons visible
   for(var i=1; i<Menus[index].length; i++)
   {
      this._parent["Btn"+i]._visible = true;
   }
   
   // update MenuStates
   MenuStates[index] = true;
}

// close a submenu
function closemenu(menu)
{
   var index = menu.index;
   
   for(var i=1; i<Menus[index].length; i++)
   {
      menu["Btn"+i]._visible = false;
   }   
   
   MenuStates[index] = false;
}


// simple over, up and click functions for the buttons
function click()
{
   var t = this.targetframe;
   trace("SomeContentClip.gotoAndStop("+t+")");
   
   // now close our menu
   closemenu(this._parent);

}

function over()
{
   this.gotoAndStop(2);
}

function up()
{
   this.gotoAndStop(1);
}

// our menu is done now, except for closing the menus
// we have a problem there - how do we close a menu?
// if we put an event on the 'wrapping' MenuX clip,
// it'll override the buttons.  if we put an event
// on a specific button, it'll only affect that button.

// the answer is - a mouse listener & a hitTest
// function coupled with the values of our MenuState
// array.

var mouseout = new Object();
mouseout.onMouseMove = function()
{
   // go through each
   for(var i=0; i<MenuStates.length; i++)
   {
      if(MenuStates[i] == true)
      {
         var activemenu = _root["Menu"+i];
         var xmouse = _root._xmouse;
         var ymouse = _root._ymouse;
         
         // see if we're off the menu
         if(!activemenu.hitTest(_root._xmouse, _root._ymouse, true))
         {
            // we're outside the x/y width/height bounds of the menu
            CloseMenu(activemenu);
            MenusActive[i][1] = false;
         }
      }
   }
}

Mouse.addListener(mouseout);


Codeausschnitt für Submenubuttons:

Code:
or(var j=1; j<Menus[i].length; j++)
   {
      // create the button
      m.attachMovie("SubMenu", "Btn" + j, 5+j);
      
      // shortcut reference
      var b = m["Btn"+j];
      
      // set up the properties
      b._y = j *20;
      b._x = 0;   
      b.Label.text = Menus[i][j];
      b.onRollOver = over;
      b.onRollOut = up;


An dieser Stelle...

b._y = j *20;

....werden die Subemenübuttons ja positioniert. Habe schon versucht an dieser stelle zu sagen, dass er die Buttons dort anordnen soll, wo das Menu aufhört (this.Menus.height), aber anscheinend ist dies nicht der richtige code....

Wär super. wenn ihr mir hier einen Denkanstoss geben könntet, denn ich komme einfach nicht weiter...

Gruß
Kyu
  View user's profile Private Nachricht senden
phihochzwei
Moderator

Dabei seit: 08.06.2006
Ort: Mülheim an der Ruhr
Alter: 39
Geschlecht: Männlich
Verfasst Do 03.08.2006 14:01
Titel

Antworten mit Zitat Zum Seitenanfang

Probier mal this[Menus[i]]._height Lächel

Zuletzt bearbeitet von phihochzwei am Do 03.08.2006 14:02, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Kyuugo
Threadersteller

Dabei seit: 30.01.2006
Ort: Moenchengladbach
Alter: 33
Geschlecht: Männlich
Verfasst Do 03.08.2006 16:40
Titel

Antworten mit Zitat Zum Seitenanfang

Nein das klappt leider nicht. Menno!

So positioniert er die Submenus immernoch unter dem jeweiligen Hauptmenüpunkt.
Man müsste ihm irgendwie sagen, dass er die Submenüs unter dem letzten Hauptmenüpunkt positionieren soll.
Dadurch das ich mit b._y=j *20 die submenüs dynamisch generiere muss dieser code noch ergänzt werden damit es überhaupt klappen kann, denn lasse ich ihn weg, werden alle submenübuttons an einer position übereinander gelegt.

Ich hab mal die .fla hochgeladen. denn nur mit dem code kann man sich immer schlecht einen eindruck machen Lächel

Dropdownmenu_test.fla


Trotzdem danke für deine Hilfe

Gruß
Kyu
  View user's profile Private Nachricht senden
phihochzwei
Moderator

Dabei seit: 08.06.2006
Ort: Mülheim an der Ruhr
Alter: 39
Geschlecht: Männlich
Verfasst Do 03.08.2006 17:39
Titel

Antworten mit Zitat Zum Seitenanfang

Also bei mir haut er die immer UNTER die Menupnkte, an die selbe Stelle. Das wolltest Du doch oder nicht ??? Oder wie ???
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Kyuugo
Threadersteller

Dabei seit: 30.01.2006
Ort: Moenchengladbach
Alter: 33
Geschlecht: Männlich
Verfasst Mo 07.08.2006 09:14
Titel

Antworten mit Zitat Zum Seitenanfang

So guten Morgen erstmal Lächel

Doch, es ist schon genau das, was ich vorhabe, jedoch habe ich jetzt nochmal selber getestet und es klappt nicht.

Wo hast du denn "this[Menu[i]]._height" angehangen ?

Muss ja eigentlich hier in der Zeile stehen, oder denk ich da falsch ?

b._y= j *20


Wär super, wenn du mir noch etwas genauer sagen könntest, wo ich diesen code anhängen muss.

Gruß
Kyu
  View user's profile Private Nachricht senden
 
Ähnliche Themen FLASH Bildlaufleiste mit dynamischen Tweens
[Flash 8] Problem mit Variablen in dynamischen MCs
Flash - Wie dynamischen Text mit HTML erstellen?
kann man dynamischen text in flash geglättet darstellen?
flash cs3 - externe html datei in dynamischen textfeld...
Flash 3D Menü ?
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Multimedia


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.