使slideToggle等待,直到其他div的slideUps完成?

时间:2013-11-24 13:03:14

标签: jquery css slidetoggle slideup

我的目标是一种特定类型的菜单,它分为四个部分,您可以通过单击部分标题来打开和关闭它们。这是我到目前为止所做的:http://jsfiddle.net/samuliviitasaari/Ya8P8/9/

除了当你已经打开一个菜单部分,然后单击另一个部分标题时,它的工作方式与我想要的完全相同。我希望等到该部分关闭然后再打开另一部分;现在一切都在发生,导致一些非常难看的闪烁。

我的问题是,我是否必须使脚本具有自我意识和#39; (=能够知道特定部分是否打开)或者是否有快速方法使slideToggle自动等待,直到已打开的部分(如果有)已关闭。当然,如果目前没有任何部分开放,请直接前进,没有延迟?

目前,核心代码相当粗糙,试图关闭所有其他部分以防万一他们是否实际开放:

$("#one").click(function () {
    $("#toggleone").slideToggle(100);
    $("#toggletwo").slideUp(100);
    $("#togglethree").slideUp(100);
    $("#togglefour").slideUp(100);
});

PS。如果您有关于如何使代码更加雄辩的任何其他提示,我将不胜感激!

2 个答案:

答案 0 :(得分:3)

尝试:

我已将toggle类添加到#toggleone,toggletwo,togglethree,togglefour div。

$(".toggle").hide();
$("#one,#two,#three,#four").click(function () {
    var id = $(this).attr("id");
    if ($("#toggle" + id).is(":visible")) {
        $("#toggle" + id).slideToggle();
    } else {
        if ($(".toggle:visible").length > 0) {
            $(".toggle:visible").slideUp(function () {
                $("#toggle" + id).slideToggle(200);
            });
        } else {
            $("#toggle" + id).slideToggle();
        }
    }
});

Updated fiddle here.

答案 1 :(得分:1)

在代码中使用.delay()等待一方发生

fiddle updated