尝试做一个非常简单的jQuery动画...
nav元素将使用负边距设置动画,但不应用类.nav_btn2,因此nav元素不会动画回原始边距。一直在这几个小时,整晚都是......早上7:47,我没有睡觉,等等。
jQuery v1.7.1
<script type="text/javascript">
$(document).ready(function() {
$('.nav_btn').on('click',function() {
$('nav').animate({marginLeft: '-445'}, 500);
$('.nav_btn').removeClass('nav_btn').addClass('nav_btn2');
});
$('.nav_btn2').on('click',function() {
$('nav').animate({marginLeft: '445'}, 500);
$('.nav_btn2').removeClass('nav_btn2').addClass('nav_btn');
});
});
</script>
HTML
<nav>
<img src="" alt="Detour Bar" id="logo" />
<ul>
<li><a href="#" class="nav_btn">BLOG</a></li>
<li><a href="#" class="nav_btn">PHOTOS</a></li>
<li><a href="#" class="nav_btn">CALANDER</a></li>
<li><a href="info.php" class="nav_btn">INFO</a></li>
</ul>
<div id="menu_btn" class="nav_btn">
</div>
</nav>
CSS
nav {
height: 100%;
width: 425px;
padding: 20px 0px 0px 20px;
background: rgb(255,255,255);
background: rgba(255,255,255,.5);
border-right: 7px solid #000;
position: fixed;
top: 0px;
left: 0px;
}
nav ul {
padding: 40px 0px 0px 0px;
list-style: none;
}
nav li {
padding: 0px 55px 0px 0px;
text-align: right;
}
nav a {
font-size: 4em;
color: #000;
}
#menu_btn {
width: 40px;
height: 161px;
border: 10px solid #000;
border-top: 15px solid #000;
border-bottom: 20px solid #000;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
background: rgb(0,0,0);
background-image: url(img/menu.png);
background-repeat: no-repeat;
position: absolute;
top: 40px;
right: -60px;
}
Jquery v1.7.1正在工作......感谢@micha
<script type="text/javascript">
$(document).ready(function() {
$(document).on('click','.nav_btn',function() {
$('nav').animate({marginLeft: '-445'}, 500);
$('.nav_btn').removeClass('nav_btn').addClass('nav_btn2');
});
$(document).on('click','.nav_btn2',function() {
$('nav').animate({marginLeft: '0'}, 500);
$('.nav_btn2').removeClass('nav_btn2').addClass('nav_btn');
});
});
</script>
任何建议都将不胜感激!!!
答案 0 :(得分:1)
您以错误的方式使用on函数。您希望on函数类似于旧的live函数,而不是旧的bind函数。
所以你需要这样做:$(document).on("click", selector, function() { ... });
因为文档将始终存在,并且文档将始终在您单击时检查选择器是否在文档中。
答案 1 :(得分:0)
我会重构代码,这不是一个好方法我认为,我已经改变了@Anthony Grist代码,这样你就可以通过一些调整来实现它:
选项是添加新类而不删除.nav_btn,或者如果您愿意,可以使用数据对象存储此信息。
$('.nav_btn').on('click',function() {
if(!$(this).hasClass("ishidden"))
{
$('nav').animate({marginLeft: '-245'}, 500);
$(".nav_btn").addClass("ishidden");
}
else
{
$('nav').animate({marginLeft: '245'}, 500);
$(".nav_btn").removeClass("ishidden");
}
});
使用数据对象,它将是这样的: http://jsfiddle.net/dactivo/HjuFA/
$('.nav_btn').on('click',function() {
if(!$('.nav_btn').data("ishidden"))
{
$('nav').animate({marginLeft: '-245'}, 500);
$('.nav_btn').data("ishidden",true);
}
else
{
$('nav').animate({marginLeft: '245'}, 500);
$('.nav_btn').data("ishidden",false);
}
});
OLDER ANSWER 2
好的,现在我知道为什么这不起作用,你要删除类“nav_btn”,然后将类“nav_btn2”分配给一个不存在的“对象”(因为你删除了nav_btn)。
您必须添加类nav_btn2然后删除。
OLDER ANSWER 1:仅适用于Jquery版本&lt; 1.7 @Anthony Grist发表评论。
您必须使用实时事件,将事件与建立事件时不存在的按钮相关联: http://api.jquery.com/live/
$('.nav_btn').live("click", function(){
...
});
$('.nav_btn2').live("click", function(){
...
});