我的第一个问题在这里,所以我会尽量简洁。
我有一系列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
像这样向每个子菜单添加/删除一个类(这里只有一个用于说明目的,但所有三个子菜单都适用于它们):
$('.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 的元素检查器,可以看到它(没有)发生。我需要单击链接两次才能toggle()
工作并驱动动画。
任何想法/建议/解决方案将不胜感激。
(编辑拼写错误)。
谢谢,