0

我有这两个未连接的函数,至少没有办法进行回调。我首先希望列表向上滑动,然后再向下滑动。为了使它实际工作,至少,不知何故,我添加了delay().

我无法制作 fsFiddle,因为代码太复杂并且所有代码<a>都包含href在其中,但您可以在此处查看工作示例:http: //liebdich.biz/

在这里做什么以及如何做:queuepromise

$('a').click(function(e){
    e.preventDefault();
    $(this).parent().find('ul').delay(500).slideDown(500);
    $('a').removeClass('bold');
    $(this).addClass('bold');

    if ($(this).is('ul ul a')) {
        return;
    } else {
        $('a').not(this).parent().find('ul').slideUp(500);
    }
 });

抱歉,但我无法制作 jsFiddle,因为<a>导航中的所有内容都有一个href.

4

3 回答 3

1

这将是使用 Promise 对象来避免重复回调的合适位置:

$('a').click(function (e) {
    e.preventDefault();
    var $this = $(this);
    $('a').removeClass('bold');
    $this.addClass('bold');
    if ($this.is('ul ul a')) {
        $this.parent().find('ul').slideDown(500);
        return;
    } else {        
        $('a').not(this).parent().find('ul').slideUp(500).promise().done(function(){
            $this.parent().find('ul').slideDown(500);
        });
    }
});
于 2013-10-21T19:29:41.843 回答
1

使用 Jquery,通常你有一个回调函数,一旦动画完成就会被调用。这里是 slideUp 的文档:http: //api.jquery.com/slideUp/

如您所见,如果您使用两个参数,则第二个参数与动画完成后调用的完整函数有关。

$('a').click(function(e){
    var _link = $(this);
    $('a').not(_link ).parent().find('ul').slideUp(500, function() {
        $(_link).parent().find('ul').delay(500).slideDown(500);
    });
});

我用你的一些代码编辑了我的代码。我仍然相信您需要使用回调函数来解决您的问题。

于 2013-10-21T19:04:26.207 回答
0
$('a').not(this).parent().find('ul').slideUp(500, function() {
    $(this).parent().find('ul').delay(500).slideDown(500);
});
于 2013-10-21T19:00:51.797 回答