jQuery Slidedown 如何在显示之前获取隐藏项的最终高度?
How does jQuery Slidedown get final height of hidden item before showing it?
我正在尝试在 GSAP 中复制 jQuery slideDown()
,但我无法弄清楚 jQuery 如何计算当前隐藏的项目的高度,就像它一样被设置为 height:auto
.
我试过搜索 GitHub 上的代码,但在它调用的 jQuery.fn.slideDown
或 jQuery.fn.animate
中找不到任何似乎在执行此操作的代码。
SO上有几个类似的问题,提出了几个解决方案,好像都有自己的问题:
克隆元素,将其放置在屏幕外并计算其高度。
如果元素或其任何子元素的高度由 CSS 样式设置,这要求元素位于 DOM 中的原始位置(例如,如果 .accordianItem
可能仅在其内部设置样式它 .accordian
).
显示项目,删除height:0
并快速计算高度,然后再次隐藏元素,然后播放动画。
计算高度时可能会快速闪现内容
计算高度时用visibility:true
显示到位
这样就可以停止闪烁并仍然将元素保持在 DOM 中的相同位置以进行正确的高度计算,但它仍会将其下方的其他项目向下推,因为 visibility:false
项目仍然具有高度。
计算项目隐藏前的高度并将其存储在数据属性中,以便我们稍后在要打开项目时知道它。
如果任何动态内容在隐藏时更改项目的高度,这将不起作用。
jQuery slideDown()
"just works" 每次都这样,所以我真的很想知道 它是如何工作的, 但我就是不知道它在哪里这样做。我也很惊讶 GSAP 不能开箱即用,或者之前没有人分享过合适的解决方案。
如有任何帮助,我们将不胜感激。
事实证明,如果您使用 $.height()
来获取带有 display:none
的元素的高度,它不会像您期望的那样 return 0
,它实际上设置 visibility:hidden
、position:absolute
等,并将 display
设置为 block
以返回正确的高度。我假设这是在进行下拉时在内部使用的内容。
这个回答对我帮助很大
jQuery: height()/width() and "display:none"
只是为了弄清楚这似乎是如何避免我原来问题中的所有问题的。它基本上是在执行数字 (3),但避免了将较低内容向下推到页面下方的问题,因为在计算高度时它也被设置为 position:absolute。一个非常简单优雅的解决方案
我正在尝试在 GSAP 中复制 jQuery slideDown()
,但我无法弄清楚 jQuery 如何计算当前隐藏的项目的高度,就像它一样被设置为 height:auto
.
我试过搜索 GitHub 上的代码,但在它调用的 jQuery.fn.slideDown
或 jQuery.fn.animate
中找不到任何似乎在执行此操作的代码。
SO上有几个类似的问题,提出了几个解决方案,好像都有自己的问题:
克隆元素,将其放置在屏幕外并计算其高度。
如果元素或其任何子元素的高度由 CSS 样式设置,这要求元素位于 DOM 中的原始位置(例如,如果.accordianItem
可能仅在其内部设置样式它.accordian
).显示项目,删除
height:0
并快速计算高度,然后再次隐藏元素,然后播放动画。
计算高度时可能会快速闪现内容计算高度时用
visibility:true
显示到位
这样就可以停止闪烁并仍然将元素保持在 DOM 中的相同位置以进行正确的高度计算,但它仍会将其下方的其他项目向下推,因为visibility:false
项目仍然具有高度。计算项目隐藏前的高度并将其存储在数据属性中,以便我们稍后在要打开项目时知道它。
如果任何动态内容在隐藏时更改项目的高度,这将不起作用。
jQuery slideDown()
"just works" 每次都这样,所以我真的很想知道 它是如何工作的, 但我就是不知道它在哪里这样做。我也很惊讶 GSAP 不能开箱即用,或者之前没有人分享过合适的解决方案。
如有任何帮助,我们将不胜感激。
事实证明,如果您使用 $.height()
来获取带有 display:none
的元素的高度,它不会像您期望的那样 return 0
,它实际上设置 visibility:hidden
、position:absolute
等,并将 display
设置为 block
以返回正确的高度。我假设这是在进行下拉时在内部使用的内容。
这个回答对我帮助很大
jQuery: height()/width() and "display:none"
只是为了弄清楚这似乎是如何避免我原来问题中的所有问题的。它基本上是在执行数字 (3),但避免了将较低内容向下推到页面下方的问题,因为在计算高度时它也被设置为 position:absolute。一个非常简单优雅的解决方案