Ich habe ein linkes Menü, das mehrere übergeordnete Menüs und darunter bestimmte untergeordnete Menüs hat. Ich möchte diesen Menüs eine ähnliche Funktionalität wie Akkordeon bieten. Wie wenn ich einen Menüpunkt wähle, dann werden seine Kindermenüs sichtbar (slideDown
Animation) und das Kindermenü des aktiven Elternmenüs wird ausgeblendet (slideUp
Animation). Zusätzlich zu dieser Funktionalität ist das ausgewählte Menü immer oben und andere Menüs werden darunter liegen.Animation des dynamisch generierten Menüs funktioniert nicht richtig
Unten ist das Code-Snippet für das gleiche:
$(document).ready(function(){
$('.dropdown').find('li:eq(0)').addClass('active');
$('.dropdown').find('[data-id="parentmenu"]').each(function() {
if ($(this).hasClass('active') == false) {
$(this).find('ul').slideUp(10);
}
});
$('ul.dropdown').on('click', '[data-id="parentmenu"]', function() {
$(this).siblings('[data-id="parentmenu"]').removeClass('active');
$(this).siblings('[data-id="parentmenu"]').each(function() {
$(this).find('ul').slideUp(500);
});
$(this).addClass('active');
$(this).find('ul').show().slideDown(500);
$markupHTML = "<li data-id='parentmenu'>" + $(this).html() + "</li>";
$($markupHTML).insertBefore($('.dropdown').find('li:eq(0)'));
$(this).remove();
});
});
ul.dropdown {
margin: 0;
padding: 0;
}
.dropdown {
font-size: 14px;
height: 20px;
width: 203px;
}
ul.dropdown li a {
color: #7f7f7f;
display: block;
font-size: 13px;
font-weight: bold;
padding-bottom: 7px;
text-decoration: none;
}
ul.dropdown li {
border-bottom: 2px solid #91a6ca;
list-style: outside none none;
margin-bottom: 7px;
}
#left_panel {
background-color: #fff;
float: left;
min-height: 700px;
min-width: 230px;
padding: 15px 3px;
width: 12%;
}
.ui-resizable {
position: relative;
}
.vdr-left-nav {
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="vdr-left-nav ui-resizable" id="left_panel">
<ul class="dropdown">
<li data-id="parentmenu" class="active">
<a title="" href="#" class="snacks"> Menu 1</a>
<ul>
<li data-id="childmenu"> <a href="#">Child Menu 1</a></li>
<li data-id="childmenu"> <a href="#">Child Menu 2</a></li>
</ul>
</li>
<li data-id="parentmenu">
<a title="" href="#" class="snacks"> Menu 2</a>
<ul >
<li data-id="childmenu"><a href="#">Child Menu 3</a></li>
<li data-id="childmenu"><a href="#">Child Menu 4</a></li>
</ul>
</li>
<li data-id="parentmenu">
<a title="" href="#" class="snacks"> Menu 3</a>
<ul >
<li data-id="childmenu"><a href="#">Child Menu 5</a></li>
<li data-id="childmenu"><a href="#">Child Menu 6</a></li>
</ul>
</li>
</ul>
</div>
Der Code fast arbeitet außer richtig, dass ich nicht die slideDown
Animation bekommen konnte für das oberste ausgewählte Menü zu arbeiten Artikel. Das ausgewählte Menü wird nur angezeigt und die Animation funktioniert überhaupt nicht.
Auch mit $(this).find('ul').slideDown(500).show();
versucht, aber das funktioniert auch nicht. Was mache ich falsch?
Jede Hilfe wird geschätzt.
Hier ist ein Fiddle für die gleiche auch.
https://jsfiddle.net/w0d8sdvo/2/ – user5200704
@ user5200704: Die Animation funktioniert wie erwartet, aber der ausgewählte Menüpunkt wird der oberste Menüpunkt sein, wie in meiner Geige –
aber Ihr Code funktioniert gut, wie Sie wollen oberste Menüelement angezeigt ausgewählt. – user5200704