• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Javascript Menü

Status
Für weitere Antworten geschlossen.

meici

Neues Mitglied
Heyho,
ich hab auf meiner Homepage dieses Menü
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
<!--

    //Korrektur der Submenu-Position
    intXPadding = 1;
    intYPadding = 0;

    //Zeit bis zum Schliessen(ms)
    intTimeout = 50;

    //hier werden später die Timeouts gespeichert... jeweils separat für jedes Submenu
    arrTimeouts = new Array();

    /**
      *  liefert beim Initialisieren des Menues zum jeweiligen Hauptmenupunkt
      *  die passende Tabbelle
      *  objMenu=Elternknoten der Hauptmenu-Tabelle
      *  intSub=Index des Menupunktes
      **/

      function get_sub(objMenu, intSub)
      {
            intTable =- 1;

            for(j = 0; j < objMenu.childNodes.length; ++j)
                {
                    intTable += (objMenu.childNodes[j].tagName=='TABLE') ? 1 : 0;

                    if(intTable==intSub)
                        {
                            return(objMenu.childNodes[j]);
                        }
                    arrTimeouts.push(false);
                }
        return false;
        }



        /**
          *  Initialisiert das Menu beim ersten mouseover der Hauptmenupunkte-Tabelle
          *  ansonsten anzeigen/verstecken der jeweiligen Submenu-Tabelle
          *  objElem = (erster Aufruf)?Hauptmenupunktabelle:Index Menupunkt
          *  blnEvt = (!erster Aufruf)?(over=1||out=0):nix;
          **/


          function menu(objElem, blnEvt)
          {

            //initalisieren de Menues beim ersten Aufruf
            if(arrTimeouts.length == 0)
                {
                    objElem.onmouseover = new Function('f','return false');
                    objMenu = objElem.parentNode;
                    blnType = (objElem.rows.length > 1) ? 1 : 0;
                    intItems=(blnType)? objElem.rows.length: objElem.rows[0].cells.length

                    for(i = 0; i < intItems; ++i)
                        {
                            objCell = (blnType)? objElem.rows[i].cells[0] : objElem.rows[0].cells[i];
                            objCell.onmouseover = new Function('f', 'menu('+i+', 1)');
                            objCell.onmouseout  = new Function('f',' menu('+i+', 0)');
                            objSub = get_sub(objMenu, i+1);
                            objSub.style.position = 'absolute';
                            objSub.style.left = (blnType)
                                                    ? (objCell.offsetLeft + (objMenu.offsetLeft - objSub.rows[0].cells[0].offsetLeft) + objCell.offsetWidth) + intXPadding
                                                    : (objCell.offsetLeft + (objSub.offsetLeft - objSub.rows[0].cells[0].offsetLeft)) + intXPadding;

                            objSub.style.top  = (blnType)
                                                    ? objCell.offsetTop + (objMenu.offsetTop - objElem.rows[0].cells[0].offsetTop) + intYPadding
                                                    : objCell.offsetHeight + (objMenu.offsetTop + objElem.rows[0].cells[0].offsetTop)+ intYPadding;


                            objSub.id = 'sub'+i;
                            objSub.width = 1;  //fixt opera-Macke mit Tabellenbreite
                            objSub.onclick = new Function('f', 'this.style.visibility = "hidden"');
                            objSub.onmouseover = new Function('f', 'menu('+i+', 1)');
                            objSub.onmouseout  = new Function('f', 'menu('+i+', 0)');
                            objSub.className = 'sub';
                        }
                    return;
                }

              //Zeigen
              if(blnEvt)
                    {
                        clearTimeout(arrTimeouts[objElem]);
                        document.getElementById('sub'+objElem).style.visibility = "visible";
                    }
              //Verstecken
              else
                    {
                        arrTimeouts[objElem] = setTimeout('document.getElementById("sub'+objElem+'").style.visibility="hidden"', intTimeout);
                    }

          }
//-->
</script>
</head>
<body>
<!--
    *alle Menutabellen(und nur diese) in einem div verpacken
    *erste Tabelle für Hauptmenupunkt
    *für jeden Hauptmenupunkt eine weitere Tabelle mit Submenu
    *für leeren Hauptmenupunkt siehe 4. Tabelle
    *in erste Tabelle [onmouseover="menu(this)"]
    *andere Tabellen [style="visibility:hidden"]
    *der Klassenname des div's ist nur für Gestaltung per CSS von Interesse
    *die Submenue-Tabellen erhalten vom Skript den Klassennamen "sub"(auch zwecks Gestaltung)
-->
 <div class="menu">
  <table onmouseover="menu(this)">
      <tr><td><a href="#">Main#1Main#1</a></td></tr>
      <tr><td><a href="#">Main#2Main#1</a></td></tr>
      <tr><td><a href="#">Main#3(leer)Main#1</a></td></tr>
      <tr><td><a href="#">Main#Main#14</a></td></tr>
  </table>
  <table style="visibility:hidden">
    <tr><td><a href="#">Sub#1_1</a></td></tr>
    <tr><td><a href="#">Sub#1_2</a></td></tr>
    <tr><td><a href="#">Sub#1_3</a></td></tr>
    <tr><td><a href="#">Sub#1_4</a></td></tr>
  </table>
  <table style="visibility:hidden">
    <tr><td><a href="#">Sub#2_1</a></td></tr>
    <tr><td><a href="#">Sub#2_2</a></td></tr>
    <tr><td><a href="#">Sub#2_3</a></td></tr>
  </table>
  <table style="display:none">
    <tr><td></td></tr>
  </table>
  <table style="visibility:hidden">
    <tr><td><a href="#">Sub#4_1</a></td></tr>
    <tr><td><a href="#">Sub#4_2</a></td></tr>
    <tr><td><a href="#">Sub#4_3</a></td></tr>
    <tr><td><a href="#">Sub#4_4</a></td></tr>
    <tr><td><a href="#">Sub#4_5</a></td></tr>
    <tr><td><a href="#">Sub#4_6</a></td></tr>
  </table>
 </div>
</body>
</html>

So sieht's aus Medieninformatik
jetz will ich aber den Menüframe nicht so riesig groß machen weil ich finde, dass das nachher nicht so gut aussieht wnen inhalt auf de Seite ist und zwischen dem Menü und dem Inhalt so viel Platz is wo nichts steht.
Kann man das Script iwie umschreiben so das wenn das Menü aufgeht sich der Menüframe verbreitert? Hab leider keine Ahnung von Java.Bin auch für andere Lösungen dankbar
Vielen Dank schon mal :)
 
1. Warum benutzt Du überhaupt Frames?
2. Warum benutzt Du ein Menü, das nur funktioniert, wenn JavaScript eingeschaltet ist?
3. Kennst Du den Unterschied zwischen Java und JavaScript?
 
ich benutze frames weil mein info lehrer das so gesgat hat....ja ich weiß komisch aba is war.
ich benutzte das menü weil ich sons keine ahnung hab wie ichs machen sollte...
wie würde es denn besser gehen?

Mfg Meici
 
Wie wärs wenn du des menu untereinander anlegst?

HTML:
<!--  Javascript -->
<script type="text/javascript">
var menu;
function menu(menu){
if(document.getElementById(menu).style.display == "block")
   document.getElementById(menu).style.display ="none";
else
   document.getElementById(menu).style.display = "block";
}
</script>
HTML:
<a href="#" onclick="menu('down')">Down</a>
<div id="down" style="display: none;">
<a href="#">...</a>
<!-- Weitere Links -->
</div>
Habs nicht getestet aber ich denk es geht ist bestimmt nicht die beste aber eine von vielen

hoffe konnte dir helfen
 
ja das hatte ich mir auch schon so überlegt, jedoch find ichs wenns daneben ist schöner. Wenn ich die Seite mit php aufbauen würde, wäre das gnaze denn dann einfacher?
 
Also wenn du die Frames weglassen tätest, dann würde es sicht mit deiner Navigation functionieren ...

Obs für dich einfach werden würde wenn du alle inhalte includest musst du wissen
(also für mich wäre es einfacher ^^ und besser)
 
gehen wir mal davon aus ich könnt die frames durch iwas sinvolles ersetzen, könnt ich dann auf irgendeine weise son ähnliches menü da hin deichseln der wäre das völlig undenkbar?
 
Also wie bereit oben erwähnt ...
so ein menu wie du etz hast täte functioniern wenn du die frames ersetzen tätest durch einzelne Seiten oder include oder was weiß ich ...
oder was meinst du ?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben