Javascript 当.slideUp()和slideDown()不';T

Javascript 当.slideUp()和slideDown()不';T,javascript,jquery,Javascript,Jquery,背景: 我遇到了一个我觉得有点出乎意料的问题。我有一个小的jQuery模块,我一直在使用.slideToggle()来显示/隐藏一个元素,它工作得很好。今天我为我的插件实现了两个公共方法,用滑动效果显示或隐藏元素 听起来很简单,但我想我还是用.slideUp()和slideDown()来完成同样的事情。当我意识到在元素上调用这些方法时什么也没发生时,我真的很惊讶 作为旁注,调用.show()和.hide()也可以正常工作,但不会产生所需的动画 我一直认为.slideToggle()实现了与.sl

背景:

我遇到了一个我觉得有点出乎意料的问题。我有一个小的jQuery模块,我一直在使用
.slideToggle()
来显示/隐藏一个元素,它工作得很好。今天我为我的插件实现了两个公共方法,用滑动效果显示或隐藏元素

听起来很简单,但我想我还是用
.slideUp()
slideDown()
来完成同样的事情。当我意识到在元素上调用这些方法时什么也没发生时,我真的很惊讶

作为旁注,调用
.show()
.hide()
也可以正常工作,但不会产生所需的动画

我一直认为
.slideToggle()
实现了与
.slideUp()
.slideDown()
相同的功能,但显然不是这样

我的问题:

<>代码> <代码> > SListToGeGeLe()/代码>与<代码> > SLUDUP()/代码>和<代码> .SLIDEDUWN()/COD> >和使用时相比,我需要考虑的是什么?

更新,示例:


我已经能够将其分解为在中重现此错误所需的最关键组件。您可以分别注释掉
.slideToggle(“slow”)
.slideUp(“slow”)
来测试它。使用slideToggle可以工作,而使用slideUp则不行。

问题在于
slideUp
不是该方法的最佳名称。更好的名称应该是“slideHide”。如果将其更改为
slideDown
,它将按预期工作,因为它对应于show

描述:通过滑动运动隐藏匹配的元素


事实上也是这样。我相信您已经颠倒了调用
slideDown
slideUp
的顺序。这里是一个更新的

代码:


最初您的内容是隐藏的,因此您应该调用
slidedown()
而不是
slideUp()
来显示它,反之亦然。

显示出现问题的实际代码@epascarello我将尝试将其分解为一些基本内容,但它是一组相当大的CSS和JS的一部分。我认为
.slideToggle()
.slideUp()
之间可能存在一些明显的差异,这可以解释这一点。@Christofer,
slideToggle()
没有按照
slideUp()
slideDown()实现(这三种方法实际上是根据
animate()
实现的)。你可能是在CSS中将元素的高度强制为某个值吗?@FrédéricHamidi好吧,感谢你对这一点的深入了解。我不会以任何方式强制元素的高度,但它包含在一个父元素中,在窗口底部有一个固定的位置,如果这会以任何方式影响它的话?(我还没有设置
top
属性,因此它也不应该强制父对象具有任何高度)。@Christofer,我会再次检查对
slideUp()
slideDown()
的调用。当元素被隐藏和
slideDown()时,您确定没有调用
slideUp()
当它是可见的,而不是相反的时候?老兄,我现在觉得自己很愚蠢!我的脑子里一直想不使用slideUp(),因为标题应该向上移动,所以我忽略了明显的内容。谢谢!如果这不是jQuery的github repo上的一张票证,你真的应该添加它作为建议。
.slideHide()
显然是一个更好的名字。@Christof Reliasson更名为
slideIn
slideOut
会更有意义,以匹配
fadeIn
fadeOut
。这很尴尬,我对名称slideUp挂断了电话,因为它看起来元素在向上滑动。我选择接受Tetax作为回答,因为他真的把我的困惑用语言表达了出来,但非常感谢你们的帮助!
var flip = true;
$(".dockedHeader").on("click", function () {
    if (flip) {
        $(".content").slideDown("slow");
        flip = !flip;
    } else {
        $(".content").slideUp("slow");
        flip = !flip;
    }
    //$(".content").slideToggle("slow");
});