Как вычесть высоту элемента с помощью vanilla JS?

#javascript

#javascript

Вопрос:

Я пытаюсь создать переключатель, чтобы скрыть / показать внутренний нижний колонтитул. Мне нужно вычислить высоту этого элемента, а затем вычесть его

Главное — приспособиться к изменению высоты в зависимости от ширины браузера

Мой текущий фрагмент кода очень неправильный, но я надеюсь, что кто-нибудь поможет мне лучше изучить JS

 var footerheight = document.querySelector(".footer").offsetHeight;
var innerheight = document.querySelector(".inner").offsetHeight;
var sitefooter = document.querySelector(".footer");
var toggle = document.querySelector(".toggle");

toggle.addEventListener('click', function() {
  sitefooter.style.bottom = (footerheight - innerheight);
});  
 footer {
  position: fixed;
  bottom:0;
  left: 0;
  width: 100%;
  background: red;
}

footer div:first-of-type {
    padding: 15px 50px;
  border-bottom: 2px solid #000;
}

.inner {
    padding: 50px;
}  
 <footer class="footer">
  <div>
    <button class="toggle">Footer toggle</button>
  </div>
  <div class="inner">
  Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
  </div>
</footer>  

Комментарии:

1. Почему не использовать display none?

2. вау, да, я не знаю, зачем мне нужно было усложнять это

3. Было бы здорово узнать еще

4. вам нужно добавить какую-то единицу измерения (px, em, rem, %, vw, vh …) в нижней части стиля, чтобы это имело эффект: sitefooter.style.bottom = (footerheight - innerheight) "px";

5. вам нужно использовать overflow: hidden, и Рейно прав

Ответ №1:

Один из подходов заключается в сохранении высоты элемента в самом элементе через dataset. Затем всякий раз, когда мы обновляем высоту, мы всегда можем вернуться к той высоте, которую мы сохранили. Чтобы сделать анимацию плавной, вы можете добавить CSS-переход.

 // Get all elements
const sitefooter = document.querySelector(".footer");
const inner = document.querySelector(".inner");
const toggle = document.querySelector(".toggle");

// Function to set a height to an element
const setElementHeight = (element, amount, unit = "px") => element.style.height = amount   unit;

// Save default heights onto elements
sitefooter.dataset.height = sitefooter.offsetHeight;
inner.dataset.height = inner.offsetHeight;

// Set default height for a smooth animation from the start
// Without this line the first toggle doesn't have an animation since you can't animate from height auto to a fixed value.
setElementHeight(sitefooter, sitefooter.offsetHeight);

// Add click event to toggle button
toggle.addEventListener("click", () => {
  // If the footer expanded, collapse it otherwise extend it
  sitefooter.offsetHeight == sitefooter.dataset.height
    ? setElementHeight(sitefooter, sitefooter.dataset.height - inner.dataset.height)
    : setElementHeight(sitefooter, sitefooter.dataset.height);
});  
 footer {
  position: fixed;
  bottom:0;
  left: 0;
  width: 100%;
  background: red;
  
  /* For an animation effect */
  transition: height 0.25s ease-in-out;
}

footer div:first-of-type {
  padding: 15px 50px;
  border-bottom: 2px solid #000;
}

.inner {
  padding: 50px;
}  
 <footer class="footer">
  <div>
    <button class="toggle">Footer toggle</button>
  </div>
  <div class="inner">
  Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
  </div>
</footer>