3

我首先尝试在.toggle()此代码中添加一个,以便菜单会在单击时设置动画,但也会在单击时关闭,然后意识到我不能很好地使用它,.animate所以.toggle()我正在尝试.click()

如果有一种方法可以通过单击替换我的mouseentermouseleave功能,那就是我正在寻找的。

我已经搜索过,但找不到任何使用动画菜单完成的地方,所以这里是该函数的 javascript:

$('#sdt_menu > li').bind('mouseenter',function(){
    var $elem = $(this);
    $elem.find('img')
         .stop(true)
         .animate({
            border: '5px solid #000',

            'width':'150px',
            'height':'170px',
            'left':'0px'
         },400,'easeOutBack')
         .andSelf()
         .find('.sdt_wrap')
         .stop(true)
         .animate({'top':'140px'},500,'easeOutBack')
         .andSelf()
         .find('.sdt_active')
         .stop(true)
         .animate({'height':'170px'},300,function(){
        var $sub_menu = $elem.find('.sdt_box');
        if($sub_menu.length){
            var left = '170px';
            if($elem.parent().children().length == $elem.index()+1)
                left = '-170px';
            $sub_menu.show().animate({'left':left},200);
        }    
    });
}).bind('mouseleave',function(){
    var $elem = $(this);
    var $sub_menu = $elem.find('.sdt_box');
    if($sub_menu.length)
        $sub_menu.hide().css('left','0px');

    $elem.find('.sdt_active')
         .stop(true)
         .animate({'height':'0px'},300)

         .andSelf().find('img')
         .stop(true)
         .animate({
            border: "2px solid #FFFFFF",
            'width':'150px',
            'height':'150px',
            'left':'0px'},400)
         .andSelf()
         .find('.sdt_wrap')
         .stop(true)
         .animate({'top':'25px'},500);
});
4

3 回答 3

1

下面我添加一个如果它打开的类,如果它关闭则删除一个类,它告诉 onclick 事件要做什么。

查看http://api.jquery.com/toggle-event/。很简单。

归功于apsillers 。

$('#sdt_menu > li').toggle(function(){
    var $elem = $(this);
    var $sub_menu = $elem.find('.sdt_box');
    $elem.find('img')
         .stop(true)
         .animate({
            border: '5px solid #000',

            'width':'150px',
            'height':'170px',
            'left':'0px'
         },400,'easeOutBack')
         .andSelf()
         .find('.sdt_wrap')
         .stop(true)
         .animate({'top':'140px'},500,'easeOutBack')
         .andSelf()
         .find('.sdt_active')
         .stop(true)
         .animate({'height':'170px'},300,function(){
        if($sub_menu.length){
            var left = '170px';
            if($elem.parent().children().length == $elem.index()+1)
                left = '-170px';
            $sub_menu.show().animate({'left':left},200);
        }    
    });
}, function(){      
    var $elem = $(this);
    var $sub_menu = $elem.find('.sdt_box');
    if($sub_menu.length)
        $sub_menu.hide().css('left','0px');     
    $elem.find('.sdt_active')
         .stop(true)
         .animate({'height':'0px'},300)     
         .andSelf().find('img')
         .stop(true)
         .animate({
            border: "2px solid #FFFFFF",
            'width':'150px',
            'height':'150px',
            'left':'0px'},400)
         .andSelf()
         .find('.sdt_wrap')
         .stop(true)
         .animate({'top':'25px'},500);
});
于 2012-06-18T16:44:36.093 回答
0

您可以定义一个全局变量,var isOpen = true;然后更改您的点击代码

$('#sdt_menu > li').on('click', isOpen, function() {
    if (isOpen) {
        // Close
    } else {
        // Open
    }
    isOpen = !isOpen;
});
于 2012-06-18T16:50:31.267 回答
0
 var isOpen = true;
 $('#sdt_menu > li').click(function(){
       if(isOpen ==  true){
           $(this).hide();
           isOpen = false;
       }else{
           $(this).show();
           isOpen = true;
       }
    }

您可以根据需要设置 isOpen 变量的默认值。

.show() 和 .hide 是切换功能的扩展功能。

于 2012-06-18T17:13:03.927 回答