Javascript 简化我的菜单动画代码

Javascript 简化我的菜单动画代码,javascript,jquery,Javascript,Jquery,我有一堆“项目”div,我想在点击它们时进行扩展。如果已经有一个项目打开了,我想在滑出新项目之前隐藏它。我还想停止点击一个已经打开的项目,停止关闭然后再次打开它 下面是我的意思示例(警告-在浏览器中编写代码): 实际上,我的大问题在于第二部分——我不得不使用if/else,这太糟糕了——如果没有任何可见的项目,我应该能够立即运行回调 我认为这将是一项非常常见的任务,我确信我缺少一个简化。任何建议,谢谢 使用延迟而不是回调,因为每个匹配项调用一次回调。如果多个项目可见,这将导致多个切换。像这样吗

我有一堆“项目”div,我想在点击它们时进行扩展。如果已经有一个项目打开了,我想在滑出新项目之前隐藏它。我还想停止点击一个已经打开的项目,停止关闭然后再次打开它

下面是我的意思示例(警告-在浏览器中编写代码):

实际上,我的大问题在于第二部分——我不得不使用if/else,这太糟糕了——如果没有任何可见的项目,我应该能够立即运行回调

我认为这将是一项非常常见的任务,我确信我缺少一个简化。任何建议,谢谢

使用延迟而不是回调,因为每个匹配项调用一次回调。如果多个项目可见,这将导致多个切换。

像这样吗

$(".projects")
.click(function () {
var a = $(this);
if (a.is(":visible")) return a.height(10)
    .slideUp(), void 0;
var b = $(".projects:visible");
b.size() > 0 ? b.height(10)
    .slideUp(function () {
    a.slideDown()
}) : a.slideDown()
})

美好的这就完成了任务,但有没有办法只在向上滑动完成后进行切换?如果我把它放在回调中,如果没有任何可见的项目,它就不会执行。延迟的唯一问题是,即使没有可见的兄弟姐妹,它仍然会延迟初始的向下滑动。如果有兄弟姐妹,兄弟姐妹。长度将是真实的。很好!我喜欢!谢谢你一直支持我:)
$('.projects').click(function() {
  var siblings = $(this).siblings('.projects:visible');
  siblings.slideUp(400);
  $(this).delay(siblings.length ? 400 : 0).slideToggle();
});
$(".projects")
.click(function () {
var a = $(this);
if (a.is(":visible")) return a.height(10)
    .slideUp(), void 0;
var b = $(".projects:visible");
b.size() > 0 ? b.height(10)
    .slideUp(function () {
    a.slideDown()
}) : a.slideDown()
})