У меня есть функция afterRender, у которой есть прослушиватель событий, когда пользователь прокручивает страницу вниз, он добавляет фиксированный класс к элементу. Прикрепление элемента к странице создает разрыв, который заставляет все последующие элементы выглядеть так, как будто они «подпрыгивают». Моя идея состояла в том, чтобы создать пустой div, который будет иметь высоту фиксированного div и занять его место, когда произойдет событие прокрутки, чтобы убрать «прыжок».
Моя проблема в том, что когда я проверяю компонент chpCard в консоли (см. Var '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