私は1つの左側メニューを持っています。これには複数の親メニューがあり、その下に特定の子メニューがあります。私は、これらのメニューにアコーディオンに似た機能を提供したいと思います。 1つのメニュー項目を選択すると、その子メニューが表示され(slideDown
アニメーション)、アクティブな親メニューの子メニューが非表示になります(slideUp
アニメーション)。この機能に加えて、選択したメニューは常に上に表示され、他のメニューが下に表示されます。以下は動的に生成されたメニューのアニメーションが正しく動作しない
同じのためのコードスニペットです:
$(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>
コードは、ほとんど私が一番上の選択したメニューのために働くslideDown
アニメーションを得ることができなかったことを除いて、正常に動作しています項目。選択したメニューが表示され、アニメーションはまったく機能しません。
$(this).find('ul').slideDown(500).show();
でも試しましたが、これも機能しません。私は間違って何をしていますか?
ご協力いただければ幸いです。
同じものもFiddleです。
https://jsfiddle.net/w0d8sdvo/2/ – user5200704
@ user5200704:期待通りにアニメーションが動作しますが、選択したメニュー項目は私のバイオリン –
のように一番上のメニュー項目になります最上位のメニュー項目を選択して表示したい場合は、コードが正常に機能しています。 – user5200704