#javascript
Вопрос:
Я столкнулся с одной проблемой, когда я создал аккордеоны/часто задаваемые вопросы, которые вы можете переключать (открывать и закрывать), переключаться на другой и закрывать предыдущий, который отлично работает. Но проблема здесь в том, что если я изменю размер своего браузера или изменю режим ориентации на альбомную или портретную, максимальная высота не будет пересчитана.
Я создал функцию «accordionHeight», которая работает при нажатии, но я не могу передать «элемент» этой функции для повторного вычисления вне моего события щелчка.
Потому что высота, очевидно, изменится только по щелчку мыши. Но я хочу, чтобы он пересчитал при вращении текущего открытого «ящика__», но это выходит за рамки.
У меня есть реальный пример на Codepen вместо кода.
Мой JS:
(() => {
const accordion = document.querySelector('[bke-data="accordion"]');
if (!accordion) {
return;
}
const items = accordion.querySelectorAll('.accordion__item');
const accordionHeight = (element, elementHeight) => {
element.style.setProperty(`--max-height`, `${elementHeight}px`);
};
const toggleAccordion = (item) => {
const itemBox = item.querySelector('.accordion__box');
const itemBoxHeight = itemBox.scrollHeight;
const openItems = accordion.querySelectorAll('.open');
const itemsLength = openItems.length;
const currentItem = item;
// itemBox.style.setProperty(`--max-height`, `${itemBoxHeight}px`);
accordionHeight(itemBox, itemBoxHeight);
if (itemsLength) {
openItems.forEach((item) => {
item !== currentItem amp;amp; item.classList.remove('open');
});
}
item.classList.toggle('open');
};
items.forEach((item) => {
item.addEventListener('click', () => toggleAccordion(item));
});
window.addEventListener('resize', accordionHeight);
})();
Кодовый набор полный код пример: https://codepen.io/Merdzanovich/pen/MWvaryG
Ответ №1:
Пожалуйста, смотрите ниже пример обработки событий изменения размера. Примечание: Запустите фрагмент в режиме полной страницы
<!DOCTYPE html>
<html>
<body onresize="myFunction()">
<p>Try to resize the browser window to display the windows height and width.</p>
<p id="demo"></p>
<p><strong>Note:</strong> this example will not work properly in IE8 and earlier. IE8 and earlier do not support the outerWidth/outerHeight propery of the window object.</p>
<script>
function myFunction() {
var w = window.outerWidth;
var h = window.outerHeight;
var txt = "Window size: width=" w ", height=" h;
document.getElementById("demo").innerHTML = txt;
}
</script>
</body>
</html>