1

所以我已经为此工作了一段时间,我尝试了许多在 stackoverflow 上找到的示例,然后在一天的大部分时间里开始阅读 js/jquery,但我仍然遇到问题。

基本上,我能够创建一个隐藏的菜单项,单击该菜单项会在屏幕上滑动,并且我能够通过切换类来更改用于打开的按钮,然后将其发送回来。

但是当我第一次尝试再次打开它时,它会打开然后自动关闭。

我构建了一个 jsfiddle,但做错了,因为它与我的网站上的工作方式不同。

小提琴:http: //jsfiddle.net/VpnrV/1/

网站:http ://ericbrockmanwebsites.com/dev4/

代码 - html:

<div id="dashboard">
    <nav id="access">
        <div class="open"></div>Here's a bunch of content representing the nav bar.
    </nav>
</div> <!-- dashboard --> 

CSS:

#dashboard {
  font-size:30px;
  float:left;
  position: absolute;
  right: -653px;
  z-index: 100;
}

#access {
    display: block;
    float: right;
    margin: 10px auto 0;
    width:730px;
}

.open {
  background: #cabd32 url(images/open.png) top left no-repeat;
  float:left;
  padding:13px 30px 16px;
}

.close {
  background: #cabd32 url(images/close.png) top left no-repeat;
  float:left;
  padding:13px 30px 16px;
}

我可笑的js:

$(document).ready(function() {  
    $('.open').click(function() {
        $('#dashboard').animate({ right: '0' });
            $(this).toggleClass('close'); 
            $('.close').click(function() {
            $('#dashboard').animate({right: '-653'});
         }
  );
 });

任何帮助是极大的赞赏!

4

2 回答 2

2

您实际上可以在单击事件中执行此操作。所有这一切都是每次你点击打开它寻找关闭类,如果它在那里,关闭菜单,如果没有打开它。然后切换close类:

$(document).ready(function () {
    $('.open').on("click", function () {
        if ($(this).hasClass('close')) {
            $('#dashboard').animate({
                right: '-653'
            });
        } else {
            $('#dashboard').animate({
                right: '0'
            });
        }

        $(this).toggleClass('close');
    });
});

我不知道这是否是最有效的,但它适用于您的示例。我也更新了它:http: //jsfiddle.net/VpnrV/3/

于 2013-02-28T23:18:29.927 回答
2

每次单击按钮时,您实际上都将类 .close 绑定到多个回调。

你可以试试这个:

$('.open').bind('click',function(){ 
    $('#dashboard').stop().animate(
    {
        right: $(this).hasClass('close') ? '-653px' : '-400px'
    });
    $(this).toggleClass('close');
});

在 animate() 前面设置 stop() 将取消当前动画并执行下一个动画,而无需将多个动画排队。

于 2013-02-28T23:29:43.520 回答