【问题标题】:Get the height of a div in afterRender()在 afterRender() 中获取 div 的高度
【发布时间】: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


    【解决方案1】:

    想通了。您需要获取具体组件并深入挖掘以获取价值。

    component.getConcreteComponent().getElements()
    

    将返回基本 div。还有一个 getElement() 方法来获取特定元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2022-01-03
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多