【发布时间】:2018-06-27 23:04:43
【问题描述】:
我有一个 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
【问题讨论】:
标签: javascript salesforce salesforce-lightning