0

下面的工作正常 - 但是一切似乎都发生了 - 我希望第一个切换在它继续打开下一个之前完成关闭

$(".masinfo").click(function(){ 
var divToShow = "."+$(this).attr('href').replace('#', '');
if (!$(divToShow).hasClass("activeBlock")) {
    $(".activeBlock").slideToggle("slow"); 
    $("#content .blocks").removeClass("activeBlock"); // finish here

    $(divToShow).slideToggle("slow"); // then start this one?
    $(divToShow).addClass( "activeBlock" );

}else{
    $(".activeBlock").slideToggle("slow"); 
    $("#content .blocks").removeClass("activeBlock");
}
return false; 
});
4

3 回答 3

2

您想使用可以作为第二个参数传递给 slideToggle 函数的完整函数。

所以你的代码看起来像这样:

$(".masinfo").click(function(){ 
var divToShow = "."+$(this).attr('href').replace('#', '');
if (!$(divToShow).hasClass("activeBlock")) {
    $(".activeBlock").slideToggle("slow", function(){
         $("#content .blocks").removeClass("activeBlock"); 

        $(divToShow).slideToggle("slow"); 
       $(divToShow).addClass( "activeBlock" );

   }); 

}else{
    $(".activeBlock").slideToggle("slow"); 
    $("#content .blocks").removeClass("activeBlock");
}
return false; 
});
于 2013-11-14T01:01:00.180 回答
1

尝试

var $blocks = $("#content .blocks");
$(".masinfo").click(function () {
    var divToShow = "." + $(this).attr('href').replace('#', '');
    var $divToShow = $(divToShow);
    if ($divToShow.hasClass("activeBlock")) {
        $divToShow.slideUp("slow");
        $divToShow.removeClass("activeBlock");
    } else {
        var $active = $blocks.not($divToShow).filter(':visible');
        if ($active.length) {
            $active.slideToggle("slow", function () {
                $divToShow.slideDown("slow"); // then start this one?
                $divToShow.addClass("activeBlock");
            });
            $active.removeClass("activeBlock"); // finish here
        } else {
            $divToShow.slideDown("slow"); // then start this one?
            $divToShow.addClass("activeBlock");
        }

    }
    return false;
});

演示:小提琴

于 2013-11-14T00:44:31.317 回答
-1

您可以使用:

.delay()( http://api.jquery.com/delay/ )

或者

setTimeout()http://www.jquery4u.com/jquery-functions/settimeout-example/

为了在两者之间插入几毫秒。

于 2013-11-14T00:45:34.773 回答