ここでの私の最初の質問なので、できるだけ簡潔にしようと思います。
私には一連のnav
要素があり、そのうちのいくつかにはnav
サブ要素があります。私の基本的な構造は次のとおりです。
<nav role="navigation" class="primary-nav main-nav">
<ul>
<li><a href="index.php">home</a></li>
<li class="about-item"><a href="#">about</a></li>
<li class="study-item"><a href="#">study</a></li>
<li class="apply-item"><a href="#">apply</a></li>
<li><a href="people.php">people</a></li>
<li><a href="shows.php">shows</a></li>
<li><a href="contact.php">contact</a></li>
</ul>
</nav>
<!-- secondary navs -->
<!-- about -->
<nav role="navigation" class="sec-nav sec-nav-about">
<ul>
<li><a href="history.php">history</a></li>
<li><a href="facility.php">facility</a></li>
<li><a href="alumni.php">alumni</a></li>
<li><a href="friends.php">friends</a></li>
<li><a href="patrons.php">patrons</a></li>
<li><a href="singers.php">singers</a></li>
</ul>
</nav>
<!-- study -->
<nav role="navigation" class="sec-nav sec-nav-study">
<ul>
<li><a href="foundation.php">foundation</a></li>
<li class="study-undergrad-item"><a href="#">undergrad</a></li>
<li class="study-postgrad-item"><a href="#">postgrad</a></li>
<li><a href="parttime.php">part time</a></li>
<li><a href="exams.php">exams</a></li>
<li><a href="saturdayschool.php">saturday school</a></li>
<li><a href="sundayschool.php">sunday school</a></li>
<li><a href="summerschool.php">summer school</a></li>
</ul>
</nav>
<!-- apply -->
<nav role="navigation" class="sec-nav sec-nav-apply">
<ul>
<li><a href="loans.php">loans</a></li>
<li><a href="auditions.php">auditions</a></li>
<li><a href="fees.php">fees</a></li>
<li><a href="exams.php">exams</a></li>
<li><a href="saturdayschool.php">saturday school</a></li>
<li><a href="sundayschool.php">sunday school</a></li>
<li><a href="summerschool.php">summer school</a></li>
</ul>
</nav>
(これらのリストはネストできる可能性があり、ネストする必要があることはわかっていますが、これは自分で作成するのではなく継承したコードであり、スタイルに含まれる可能性のある他のものを台無しにしたくありません)。
つまり、私が欲しいのは、3番目、4番目、5番目のメインナビゲーションアイテムがクリックされたときに、対応するサブメニューがマージン左を使用してアニメーション化することです。
私は現在、jQuery.toggle()
を使用してこの効果を達成しようとしています。これが私のjQueryです:
$(document).ready(function(){
$('.main-nav .about-item a').toggle (
function(){
$('.sec-nav-about').animate({marginLeft: "480"}, 500);
},
function(){
$('.sec-nav-about').animate({marginLeft: "-250"}, 500);
});
$('.main-nav .study-item a').toggle (
function(){
$('.sec-nav-study').animate({marginLeft: "480"}, 500);
},
function(){
$('.sec-nav-study').animate({marginLeft: "-250"}, 500);
});
$('.main-nav .apply-item a').toggle (
function(){
$('.sec-nav-apply').animate({marginLeft: "480"}, 500);
},
function(){
$('.sec-nav-apply').animate({marginLeft: "-250"}, 500);
});
});
この時点までは、問題ありません。しかし、私はこの点を超えることはできません。次のことを実現するためにコードを作り直す方法がわかりません。
1)各メインメニュー項目をクリックしたときに、サブメニューがあり、まだ表示されていない場合は、サブメニューがアニメーション化されます(これは正常に機能しています)。
2)サブメニューがすでに表示されている場合、そのメインメニュー項目をクリックすると、サブメニューは表示されなくなるまでアニメーションで戻ります(これも機能しています)。
3)サブメニューが表示されていて、別のサブメニュー項目をクリックすると、最初のサブメニューが表示されなくなり、新しいサブメニューがアニメーション化されるまでアニメーション化されます。これは機能しません。
私はそのように各サブメニューにクラスを追加/削除しようとしまし.active
た(ここでは説明のために1つだけですが、3つのサブメニューすべてにこれが適用されています):
$('.main-nav .about-item a').toggle (
function(){
$('.active').animate({marginLeft: "-250"}, 500).removeClass('active');
$('.sec-nav-about').animate({marginLeft: "480"}, 500).addClass('active');
},
function(){
$('.sec-nav-about').animate({marginLeft: "-250"}, 500).removeClass('active');
});
});
その後、何が起こるかというと、それは機能しているように見え、しばらくすると、.active
クラスの削除/追加が停止します。ChromeのElementInspectorを再確認したところ、発生していないことがわかりました。を機能させてアニメーションを駆動するには、リンクを2回クリックする必要があります。toggle()
任意のアイデア/提案/解決策は非常にありがたいです。
(スペルミスのために編集)。
ありがとう、