Javascript 如何排除错误jQuery动画的故障

Javascript 如何排除错误jQuery动画的故障,javascript,jquery,html,css,Javascript,Jquery,Html,Css,最近,我正在为一个需要一些元素动画的网站模板编写代码。当然,我决定打开jQuery并使用它的一些标准库来设置div的动画。在本例中,我想使用slideUp()函数。当我将其编码并进行试验时,我注意到动画非常不稳定,所以我决定在这里和互联网上寻找线索,结果很短 这个问题提供了一些提示,但我最终没有实际使用。所以我想知道:过去你是如何处理这种情况的?我将发布一个答案,其中包含我认为有用的解决方案。糟糕的最小高度/最小宽度 我遇到的第一个也是最常见的错误是使用最小高度或最小宽度。如上所述,无论您的标准

最近,我正在为一个需要一些元素动画的网站模板编写代码。当然,我决定打开jQuery并使用它的一些标准库来设置div的动画。在本例中,我想使用slideUp()函数。当我将其编码并进行试验时,我注意到动画非常不稳定,所以我决定在这里和互联网上寻找线索,结果很短


这个问题提供了一些提示,但我最终没有实际使用。所以我想知道:过去你是如何处理这种情况的?我将发布一个答案,其中包含我认为有用的解决方案。

糟糕的最小高度/最小宽度

我遇到的第一个也是最常见的错误是使用最小高度或最小宽度。如上所述,无论您的标准高度设置如何,它都会导致动画跳跃。为什么会发生这种情况

假设您有一个高度为75像素、最小高度为50像素的div,并且您希望使用一些动画功能将该div的高度减少到零(例如slideUp()),当动画开始时,它将开始从总已知高度中减去。当它达到设置的最小高度时,它将尝试将div height设置得更低,但在元素的样式中添加
display:none
之前,它将无法将div height设置得更低,并一直保持在那里,从而导致假定的“起伏动画”。它实际上并不起伏不定:它正在失败。如果要在设置了最小高度(大于0)的div上运行标准的animate(),例如
$(“div”).animate({height:'0px')})
,您会发现动画只是停留在设置的最小高度

这个问题的解决方案是简单地取消css中div的任何最小高度,或者设置
minheight:0如果在别处声明了最小高度

不幸的人没有高度/宽度

另一个常见的错误是根本不设置对象的高度(或宽度,取决于动画的方向)。这可能会导致动画功能由于需要调整的高度计算错误而跳转。未设置的宽度/高度可能会产生不同的结果,并且可能会成功或失败,这取决于其周围和包含的DOM。最好的做法是在要设置动画的任何元素上设置高度和宽度。高度/宽度百分比可以

Padding/Margin/Padding/Margin


您可能会遇到由于正在尝试制作动画的元素或其中的任何元素的填充/边距塌陷而导致的起伏动画问题。这是一个通过添加
边框解决的简单问题:1px实心透明到正在设置动画的元素。这为jQuery创建了一个要使用的边界,因此它基本上忽略了折叠的填充/边距。

糟糕的最小高度/最小宽度

我遇到的第一个也是最常见的错误是使用最小高度或最小宽度。如上所述,无论您的标准高度设置如何,它都会导致动画跳跃。为什么会发生这种情况

假设您有一个高度为75像素、最小高度为50像素的div,并且您希望使用一些动画功能将该div的高度减少到零(例如slideUp()),当动画开始时,它将开始从总已知高度中减去。当它达到设置的最小高度时,它将尝试将div height设置得更低,但在元素的样式中添加
display:none
之前,它将无法将div height设置得更低,并一直保持在那里,从而导致假定的“起伏动画”。它实际上并不起伏不定:它正在失败。如果要在设置了最小高度(大于0)的div上运行标准的animate(),例如
$(“div”).animate({height:'0px')})
,您会发现动画只是停留在设置的最小高度

这个问题的解决方案是简单地取消css中div的任何最小高度,或者设置
minheight:0如果在别处声明了最小高度

不幸的人没有高度/宽度

另一个常见的错误是根本不设置对象的高度(或宽度,取决于动画的方向)。这可能会导致动画功能由于需要调整的高度计算错误而跳转。未设置的宽度/高度可能会产生不同的结果,并且可能会成功或失败,这取决于其周围和包含的DOM。最好的做法是在要设置动画的任何元素上设置高度和宽度。高度/宽度百分比可以

Padding/Margin/Padding/Margin

您可能会遇到由于正在尝试制作动画的元素或其中的任何元素的填充/边距塌陷而导致的起伏动画问题。这是一个通过添加
边框解决的简单问题:1px实心透明到正在设置动画的元素。这为jQuery创建了一个要使用的边界,因此它基本上忽略了折叠的填充/边距