2 Stimmen

JQuery slideUp horizontales Menü anstelle von slideDown

Ich habe dieses Menü:

<html>
 <head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"></script>
  <script>
   $(function() {
    $("#menu").find("li").each(function() {
     if ($(this).find("ul").length > 0) {
      $(this).mouseenter(function() {
       $(this).find("ul").stop(true, true).slideDown(); 
      }); 
      $(this).mouseleave(function() {  
       $(this).find("ul").stop(true, true).slideUp();  
      });
     }
    });
   });
  </script>
  <style>
   #menu {
    display:block;
    margin:120px auto 20px;
    border:1px solid #222;
    position:relative;
    background-color:#6a6a6a;
    font:16px Tahoma, Sans-serif;
   }  
   #menu ul {
    padding:0;
    margin:0;
   }  
   #menu li {
    position:relative;
    float:left;
    list-style-type:none;
   }  
   #menu ul:after {
    content:".";
    display:block;
    height:0;
    clear:both;
    visibility:hidden;
   }  
   #menu li a {
    display:block;
    padding:10px 20px;
    border-left:1px solid #999;
    border-right:1px solid #222;
    color:#eee;
    text-decoration:none;
   }  
   #menu li a:focus {
    outline:none;
    text-decoration:underline;
   }  
   #menu li:first-child a {
    border-left:none;
   }  
   #menu li.last a {
    border-right:none;
   }  
   #menu a span {
    display:block;
    float:right;
    margin-left:5px;
   }  
   #menu ul ul {
    display:none;
    width:100%;
    position:absolute;
    left:0;
    background:#6a6a6a;
   }  
   #menu ul ul li {
    float:none;
   }  
   #menu ul ul a {
    padding:5px 10px;
    border-left:none;
    border-right:none;
    font-size:14px;
   }

   a:hover {
    cursor: pointer;
   }
  </style>
 </head>
 <body>
  <div id="menu">
   <ul>
    <li>
     <a>Item1</a>
    </li>
    <li>
     <a>Item2</a>
     <ul>
      <li><a href="#">item2-1</a></li>
      <li><a href="#">item2-2</a></li>
      <li><a href="#">item2-3</a></li>
     </ul>
    </li>
   <li>
    <a>Item3</a>
    <ul>
     <li><a href="#">item3-1</a></li>
     <li><a href="#">item3-2</a></li>
     <li><a href="#">item3-3</a></li>
    </ul>
   </li>
   <li>
    <a>Item4</a>
   </li>
  </ul>
 </div>
 <body>
<html>

Sie gleitet nach unten, wenn sich der Cursor über einer li die eine ul .

Ich möchte, dass das Untermenü nach oben über das horizontale Menü gleitet, anstatt nach unten zu rutschen.

Wie kann ich das erreichen?

Ich danke Ihnen!

Hier ist das jsFiddle

6voto

generalhenry Punkte 17017
#menu ul ul {
    bottom:38px;
} 

Die Einstellung des unteren Endes der verschachtelten Listen ist ausreichend

3voto

user113716 Punkte 309387

Ich bin nicht ganz sicher, was das Problem ist, aber Sie sollten in der Lage sein, Ihren Code zu reduzieren, um dies mit einem komplexeren Selektor:

$("#menu > ul > li:has(ul)").mouseenter(function() { 
    $(this).find("ul").stop(true, true).slideDown();  
}).mouseleave(function() {  
    $(this).find("ul").stop(true, true).slideUp();  
});

EDIT: Verstehe, Sie wollen, dass die physische Richtung des Menüs nach oben und nicht nach unten geht. Dazu müssen Ihre Menüs ganz unten positioniert werden. Dann wird eine Änderung der Höhe machen sie nach oben gehen.

http://jsfiddle.net/BKLjs/

#menu ul ul {
    display:none;
    width:100%;
    position:absolute;
    left:0;
    bottom: 40px;
    background:#6a6a6a;
}

Hier ist eine weitere kleine Code-Reduzierung: http://jsfiddle.net/BKLjs/2/

$("#menu > ul > li:has(ul)").hover(function(e) { 
    $(this).find("ul").stop(true, true)['slide' + (e.type === 'mouseenter' ? 'Down' : 'Up')]();  
});

3voto

http://jsfiddle.net/SebastianPataneMasuelli/LDQfW/10/

Hinweis: verwendet Jquery UI:

.show("slide", { direction: "down" });
.hide("slide", { direction: "up" });

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X