javascript - 在 afterRender() 中获取 div 的高度
问题描述
我有一个 afterRender 函数,它有一个事件监听器,当用户向下滚动页面时,它将固定类添加到元素中。将元素固定到页面会创建一个间隙,使所有后续元素看起来像是“跳”了起来。我的想法是创建一个空 div,它具有固定 div 的高度,并在滚动事件发生时取代它,从而消除“跳跃”。
我的问题是,当我在事件执行时检查控制台中的 chpCard 组件(请参阅“chpTarget”变量)时,该元素似乎在没有宽度/高度的情况下呈现。我已经检查了它的 offsetHeight 并且它重新变为 0。但是当我在 Lightning 完成后再次检查它时,我得到了具有正确值的 offsetHeight。所以我的问题是:我应该如何获得高度?afterRender 不是意味着 DOM 中的一切都准备好了可以使用吗?为什么它呈现为 0 高度元素?
这是 CMP:
<lightning:card class="slds-page-header slds-page-header_object-home" aura:id="chpCard">
<p>Lorem Ipsum</p>
<p>Lorem Ipsum</p>
<p>Lorem Ipsum</p>
</lightning:card>
这是渲染方法
afterRender: function(component, helper) {
this.superAfterRender();
window.addEventListener('scroll', function (event) {
var chpTarget = component.find('chpCard');
var wrapper = component.find('chpWrapper');
if (event.srcElement.documentElement.scrollTop > 12) {
$A.util.addClass(chpTarget, 'slds-is-fixed');
} else {
$A.util.removeClass(chpTarget, 'slds-is-fixed');
}
});
}
我希望闪电生成的某种虚拟 DOM 存在这些元素的真正价值,但我并没有屏住呼吸。:S
解决方案
弄清楚了。您需要获取具体组件并深入挖掘以获取价值。
component.getConcreteComponent().getElements()
将返回基本 div。还有一个 getElement() 方法可以获取特定元素。
推荐阅读
- visual-studio - 使用 CMake 生成构建系统时选择 MSVS 构建配置
- ios - canOpenURL 返回 true 并且应用程序已安装但应用程序未打开
- cookies - 无法使用 JavaScript 删除 cookie - 我做错了什么?
- c - 在 pthread_create 中创建的函数接受指向 int 的指针时的奇怪行为
- amazon-web-services - 新数据的 Elasticache / Redis 时间戳
- c# - 如何将支付线转入Sage 50?
- angular - Angular 9 NgRx - 在文件上传时检测到不可序列化的操作
- entity-framework-core - 将 efCore 从 2.2 更新到 3.1 时拥有的实体
- python - 在 Python 中选择平滑参数并实现非参数回归
- wix - 如何在 WIX 项目的版本属性中分配字符串