Получить высоту элемента - jQuery

Я ищу способ установить высоту некоторых секций равной 100vh, если нормальная высота секции (высота, определяемая содержимым) меньше высоты области просмотра.

По этой причине я использую следующий код:

$(function() {

  var windowWidth = $(window).width();
  var windowHeight = $(window).height();

  $('section').each(function (index, value) {

    console.log($(this).attr('id') + ': ' + $(this).outerHeight());

    if ( windowWidth > windowHeight && windowHeight > $(this).outerHeight()) {
      $(this).addClass("total");
    }

    else {
      $(this).removeClass("total");
    }

  });

});

Журнал консоли говорит, что один из моих разделов имеет высоту 880 пикселей, в то время как в действительности он имеет 906 пикселей. По этой причине класс добавляется, даже если дисплей слишком маленький, что приводит к ужасному дизайну...

Я думаю, что я знаю, почему высота возвращается, но я понятия не имею, как сделать это правильно...

Раздел, о котором мы говорим, содержит круглые индикаторы выполнения, которые анимированы этим плагином. Так что можно сказать, что круги еще не загружены, но они есть! Однажды я определил функцию перед определением окружностей, а затем высота в журнале консоли была точно такой же, как высота окружностей, меньшая, чем сейчас. Таким образом, разница в 26 пикселей должна быть вызвана чем-то другим.

Если я войду $('#sectionID').outerHeight() в консоли браузера возвращается правильная высота, поэтому кажется, что какой-то элемент не был загружен при выполнении каждой функции. Но эта функция находится внутри функции готовности документа, так что это не должно быть так...

У кого-нибудь есть идея?


Код круга

var size = "130";

var progress1 = $('.progress1'),
    inited_progress1 = false;

progress1.circleProgress({
  value: 0,
  size: size,
  lineCap: "round",
  fill: {
    gradient: ["#00C853", "#00E676"]
  }
});

progress1.appear(
  { force_process: true }
);

progress1.on('appear', function() {
  if (!inited_progress1) {
    designer.circleProgress({
      value: 0.65,
      size: size,
      lineCap: "round",
      fill: {
        gradient: ["#7CB342", "#689F38"]
      }
    });

    inited_progress1 = true;
  }
});

Их восемь. А на обычных экранах они отображаются в два ряда.


Постановили

Благодаря идее zsawaf я смог решить проблему без использования JavaScript.

Вот код SCSS/CSS:

section {
  display: flex;
  align-items: center;
  justify-content: center;
}

@media (orientation: landscape) {
  section {
    min-height: 100vh;
  }
}

0 ответов

Другие вопросы по тегам