• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zmiana wartości wysokości za pomocą JS

Object Storage Arubacloud
0 głosów
120 wizyt
pytanie zadane 20 czerwca 2020 w JavaScript przez Allen Obywatel (1,010 p.)

Chcę aby po kliknięciu element .help uzyskał height: auto; jeśli jej nie posiada lub height: 0; w przeciwnym wypadku. Udało i się to zrobić jednak całość działa dopiero po drugim kliknięciu i nie mampojęcia z czego to wynika, ani jak to naprawić. Kod z html:

<h3 class="faq-header">...</h3>
					<div class="help">
						...
					</div>

Z css:

.help {
    height: 0px;
    overflow: hidden;
    transition: 1s;
}

Z js:

const faqHeaders = document.querySelectorAll('.faq-header');
faqHeaders.forEach(faqHeader => {
    faqHeader.addEventListener('click', () => {
        let syblingStyles = faqHeader.nextElementSibling.style;
        
        if (syblingStyles.height == '0px') {
            syblingStyles.height = 'auto';
            syblingStyles.overflow = 'visible';
            console.log('kl');
        } else {
            syblingStyles.height = '0px';
            syblingStyles.overflow = 'hidden';
            console.log('xd');
        }
    });
});

Dodam, że próbowałem każdej wersji porównania, zarówno == jak i === oraz '0px', 0 + 'px', czy po prostu 0.

1 odpowiedź

+1 głos
odpowiedź 20 czerwca 2020 przez pablop76 VIP (123,180 p.)
wybrane 21 czerwca 2020 przez Allen
 
Najlepsza

Zauważ,że js manipuluje stylem inline, a to co masz w class to inna bajka. Inline na początku jest pusty wiec nic się nie dzieje bo wykonuje się else przypisując syblingStyles.height = '0px'; i dopiero teraz nextElementSibling dostaje style="height:0px"

Może lepiej będzie użyć classList.toggle

const faqHeaders = document.querySelectorAll('.faq-header');
faqHeaders.forEach(el => {
    el.addEventListener('click', () => {
        const syblingStyles = el.nextElementSibling;
        syblingStyles.classList.toggle('help') 
    });
});

 

komentarz 21 czerwca 2020 przez Allen Obywatel (1,010 p.)

Faktycznie lepiej użyć toggle(). Chciałem mieć transition dodane w css, ale nie działają one gdy właściwość ustawiona jest na auto, więc napisałem taki kod i wszystko pięknie działa:

faqHeaders.forEach(faqHeader => {
    faqHeader.addEventListener('click', () => {
        let sybling = faqHeader.nextElementSibling;
        let syblingStyles = faqHeader.nextElementSibling.style;
        let height = sybling.scrollHeight + 'px';
        sybling.classList.toggle('visible');
        if (sybling.classList.contains('visible')) {
            syblingStyles.height = height;
        } else {
            syblingStyles.height = '0px';
        }
    });
});

 Dzięki za pomoc.

Podobne pytania

0 głosów
0 odpowiedzi 114 wizyt
0 głosów
1 odpowiedź 179 wizyt
pytanie zadane 2 września 2017 w HTML i CSS przez beginner93 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 139 wizyt

92,584 zapytań

141,433 odpowiedzi

319,668 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...