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

Drugi poziom rozwijanego menu JS

Object Storage Arubacloud
0 głosów
399 wizyt
pytanie zadane 18 stycznia 2019 w JavaScript przez Helio Dor Nowicjusz (230 p.)
edycja 18 stycznia 2019 przez Helio Dor

Witam serdecznie, problem polega na niepożądanym efekcie rozwijania/zwijania menu drugiego poziomu. Mam na myśli, iż działa rozwijanie, lecz tylko gdy nacisnę na 'a' - a w tym 'a' mam również 'i' i 'p'. A naciśnięcie na 'i' lub 'p' powinno też rozwijać menu, lecz tego nie robi. Mam nadzieje, że znajdzie się ktoś chętny, kto przede wszystkim wytłumaczyłby mi błąd, który popełniłem :) Niżej wrzucam zawartość HTML, CSS i JS

 

UWAGA!

By burger się pokazał, trzeba wejść w tryb programisty i przełączyć na mobile, sory za niewygode..

 

<!DOCTYPE html>
<html lang="pl">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Poradniki do Shakes and Fidget</title>
    <link href="https://fonts.googleapis.com/css?family=Roboto:400,700&amp;subset=latin-ext" rel="stylesheet">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/"
        crossorigin="anonymous">
    <link rel="stylesheet" href="style.css">
</head>

<body>
    <div class="main-wrapper">
        <header>
            <input class="burger-check" id="burger-check" type="checkbox"><label for="burger-check" class="burger"></label>
            <div class="wrapper"></div>
            <nav id="navigation1" class="navigation">
                <div class="minilogo">
                    <img src="images/logo.png" alt="">
                </div>
                <div class="national">
                    <div class="en"><a href="indexen.html"><img src="images/en.png" alt=""></a></div>
                </div>
                <ul>
                    <li><a href="#"><i class="fas fa-home"></i><p>Strona główna</p></a></li>
                    <li>
                        <a href="#" class="mainmenu">
                            <i class="fas fa-chevron-right"></i>
                            <p>Klaser</p>
                            <i class="fas fa-plus"></i>
                        </a>
                        <ul class="hidemenu hidesubmenu">
                            <li>Zadania</li>
                            <li>Przedmioty</li>
                        </ul>
                    </li>
                    <li><a href="#" class="mainmenu"><i class="fas fa-chevron-right"></i><p>Poradniki</p><i class="fas fa-plus"></i></a>
                        <ul class="hidemenu hidesubmenu">
                            <li>Twierdza</li>
                            <li>Pupile</li>
                            <li>Podziemia</li>
                        </ul>
                    </li>
                    <li><a href="#" class="mainmenu"><i class="fas fa-chevron-right"></i><p>Profesje</p><i class="fas fa-plus"></i></a>
                        <ul class="hidemenu hidesubmenu">
                            <li>Mag</li>
                            <li>Wojownik</li>
                            <li>Zwiadowca</li>
                            <li>Zabójca</li>
                            <li>Paladyn</li>
                        </ul>
                    </li>
                    <li><a href="#" class="mainmenu"><i class="fas fa-chevron-right"></i><p>Dodatkowe informacje</p><i
                        class="fas fa-plus"></i></a>
                        <ul class="hidemenu hidesubmenu">
                            <li>o twierdzy</li>
                            <li>o pupilach</li>
                            <li>o podziemiach</li>
                        </ul>
                    </li>
                </ul>
            </nav>
        </header>
    </div>
    <script src="js/main.js"></script>
</body>

</html>
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html {
    text-align: left;
    font-size: 20px;
    font-family: 'Roboto', arial, sans-serif;
    max-width: 1600px;
    margin: 0 auto;
    background-color: black;
}

.clearfix::after {
    content: "";
    display: block;
    clear: both;
}

header {
    background-color: black;
    height: 15vh;
    color: white;
    width: 82vw;
    display: block;
    overflow: hidden;
    background-image: url(images/logo.png);
    background-position: top;
    background-size: contain;
    max-width: 100%;
    background-repeat: no-repeat;
    margin: 0 0 0 18vw;
}

div.header {
    background-color: black;
    line-height: 20px;
}


/* MENU BURGER NOWE */

.main-wrapper.menu-active {
    overflow: hidden;
    width: 100vw;
    height: 100vh;
}

.burger {
    position: absolute;
    top: 7vh;
    left: 7vw;
    display: block;
    border: 0;
    background: unset;
    outline: 0;
    padding: 0;
    cursor: pointer;
    border-bottom: 4px solid currentColor;
    width: 28px;
    transition: border-bottom 1s ease-in-out;
    -webkit-transition: border-bottom 1s ease-in-out;
}

.burger::-moz-focus-inner {
    border: 0;
    padding: 0;
}

.burger:before {
    content: "";
    display: block;
    border-bottom: 4px solid currentColor;
    width: 100%;
    margin-bottom: 5px;
    transition: -webkit-transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
    -webkit-transition: -webkit-transform 0.5s ease-in-out;
}

.burger:after {
    content: "";
    display: block;
    border-bottom: 4px solid currentColor;
    width: 100%;
    margin-bottom: 5px;
    transition: -webkit-transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
    -webkit-transition: -webkit-transform 0.5s ease-in-out;
}

.burger-check {
    display: none;
}

.burger-check:checked~.burger {
    top: 50vh;
    left: 87vw;
    width: 12vw;
    height: 12vw;
    border-bottom: 4px solid transparent;
    transition: border-bottom 0.8s ease-in-out;
    -webkit-transition: border-bottom 0.8s ease-in-out;
    z-index: 100;
}

.burger-check:checked~.burger:before {
    transform: rotate(-405deg) translateY(1px) translateX(-3px);
    -webkit-transform: rotate(-405deg) translateY(1px) translateX(-3px);
    transition: -webkit-transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
    -webkit-transition: -webkit-transform 0.5s ease-in-out;
}

.burger-check:checked~.burger:after {
    transform: rotate(405deg) translateY(-4px) translateX(-5px);
    -webkit-transform: rotate(405deg) translateY(-4px) translateX(-5px);
    transition: -webkit-transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out;
    transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
    -webkit-transition: -webkit-transform 0.5s ease-in-out;
}

.navigation {
    overflow: auto;
    max-height: 0;
    z-index: 0;
}

.burger-check:checked~.navigation {
    position: absolute;
    display: block;
    top: 0;
    left: 0;
    height: 100vh;
    width: 85%;
    max-height: 100vh;
    transition: max-height 0.5s ease-in-out;
    background-color: #494e52;
    z-index: 2;
    border: 3px solid #5b6269;
}

.navigation ul li:nth-child(1) {
    background-color: #32363a;
}

a {
    color: inherit;
}

small {
    font-size: 14px;
}

.navigation ul {
    display: none;
}

.burger-check:checked~.navigation ul {
    position: relative;
    display: block;
    width: 100%;
    margin: 15vh 0 0 0;
    padding: 0;
}

li a {
    text-decoration: none;
}

li a:hover {
    text-decoration: underline;
}

.wrapper {
    top: 0;
    left: 85vw;
    max-height: 0;
    z-index: 0;
}

.wrapper.active {
    position: absolute;
    display: block;
    top: 0;
    left: 85vw;
    height: 100vh;
    width: 15vw;
    max-height: 100vh;
    background-color: black;
    opacity: .7;
    z-index: 1;
    transition: max-height 0.5s ease-in-out;
}

.minilogo img {
    width: 100%;
    height: 100%;
}

.minilogo {
    display: none;
}

.minilogo.active {
    position: absolute;
    display: block;
    width: 60vw;
    height: 25vw;
    top: 1vh;
    left: 12vw;
}

ul li a p {
    vertical-align: middle;
    padding-left: 5px;
    text-transform: none;
    display: inline;
    font-size: 18px;
    line-height: 18px;
    overflow: hidden;
    white-space: pre-wrap;
}

ul li a {
    position: relative;
    display: inline-block;
    bottom: 0;
    width: 100%;
    min-height: 30px;
    padding: 10px 20px;
    color: #fff;
}

ul li a .fas {
    text-align: right;
    vertical-align: middle;
}

ul li {
    position: relative;
    display: list-item;
    width: 100%;
    list-style-type: none;
    padding: 5px 0;
    border-bottom: 1px solid #5b6269;
    list-style: none;
    font-size: 20px;
    line-height: 20px;
}

.burger-check:checked~.navigation ul.hidemenu {
    position: relative;
    display: block;
    width: 100%;
    margin: 0;
    padding: 0;
}

ul li:last-child {
    border-bottom: none;
}

.burger-check:checked~.navigation ul.hidemenu.hidesubmenu {
    display: none;
}


.fa-chevron-right {
    color: #ff4d4d;
}

.fa-plus {
    position: absolute;
    top: 3vh;
    right: 5vw;
}

.national {
    position: relative;
    display: block;
    width: 83vw;
    height: 10vh;
    top: 10vh;
    left: 0;
}

.pl {
    position: absolute;
    width: 15vw;
    height: 15vw;
    background-color: unset;
    top: 3vh;
    left: 34vw;
}

.en {
    position: absolute;
    width: 15vw;
    height: 15vw;
    background-color: unset;
    top: 3vh;
    left: 34vw;
}

.pl img {
    width: 100%;
    height: 100%;
}

.en img {
    width: 100%;
    height: 100%;
}

@media (min-width: 360px) {}

@media (min-width: 411px) {}

@media (min-width: 768px) {
    li a {
        font-size: 36px;
    }

    .burger {
        top: 11vh;
        left: 10vw;
    }

    .burger-check:checked~.navigation ul {
        margin: 20vh 0 0 10vw;
    }
}


@media (orientation: landscape) {
    li {
        line-height: 1.3em;
    }

    .burger {
        top: 25vh;
        left: 9vw;
    }

    .burger-check:checked~.navigation ul {
        margin: 40vh 0 0 10vw;
    }
}

@media (orientation: landscape) and (min-width: 568px) {
    .burger {
        top: 18vh;
    }
}

@media (orientation: landscape) and (min-width: 812px) {
    .burger {
        top: 22vh;
    }

    .burger-check:checked~.navigation ul {
        margin: 50vh 0 0 10vw;
    }
}

@media (min-width: 1024px) {
    .burger {
        display: none;
    }
}

@media (min-width: 1400px) {
    display: none;
}
const parent = document.querySelector('ul');
parent.addEventListener('click', function (ev) {
    const t = ev.target;

    if (t.classList.contains('mainmenu'))
        t.nextElementSibling.classList.toggle('hidesubmenu');
});

 

komentarz 18 stycznia 2019 przez pablop76 VIP (123,120 p.)
Pusta strona po odpaleniu tego co podałeś, więc nie wiem czy ktoś ma tyle czasu żeby przejrzeć gdzie jest błąd.

1 odpowiedź

0 głosów
odpowiedź 18 stycznia 2019 przez Helio Dor Nowicjusz (230 p.)
Mogę podać cały kod strony. Ja bardziej stawiam, by coś zmienić w JS np. "t.nextElementSibling.classList.toggle('hidesubmenu');" może się da ustawić, by zmienić klasę na ostatnim elemencie w tej samej linii, a nie na następnym ? A w tym kodzie wystarczy ustawić, by pokazywało się od razu menu a nie po kliknięciu burgera. Zaraz postaram się zmienić kod.
komentarz 23 stycznia 2019 przez Helio Dor Nowicjusz (230 p.)

kombinuje i nie umiem tego użyć :/ 

If(przycisk) {
    przycisk.addEventListener("click", function () {
        przycisk.classList.toggle("active")
    })
}

Jakaś podpowiedź? 

1
komentarz 23 stycznia 2019 przez pablop76 VIP (123,120 p.)

Nie kopiuj tylko, sprawdź co robi dana funkcja. Skopiowsłeś If z błędem. Instrukcja powinna być napisana małą literą.

komentarz 23 stycznia 2019 przez Helio Dor Nowicjusz (230 p.)
oj wybacz faktycznie.. a to taką funkcję mam na każdym skrypcie robić ? Czy da się jakoś uogólnić?

@Edit

Znaczy czy można robić ifa w ifie itd albo jest jakaś lepsza metoda ?
komentarz 24 stycznia 2019 przez pablop76 VIP (123,120 p.)
Może warto rozdzielić skrypt i stosować tam gdzie jest potrzebny? Oczywiście nie może być  rozdrobniony. Duża ilość żądań spowalnia działanie strony.
komentarz 24 stycznia 2019 przez Helio Dor Nowicjusz (230 p.)
edycja 24 stycznia 2019 przez Helio Dor
Ale jak to rozdzielić ? Przepraszam, dopiero wchodzę w świat JS i może mam głupie pytania, ale staram się ZROZUMIEĆ kody, nie je kopiować :)

BTW

Przyjrzałem się dogłębniej Twojemu skryptowi ciut wyżej, przeanalizowałem, zmodyfikowałem i pewną funkcję na stronie zmieniłem pod ten kod i z ok. 35-40 linijek zrobiło się 6 :) Dziękuje za pomoc :)

Podobne pytania

0 głosów
3 odpowiedzi 1,051 wizyt
0 głosów
1 odpowiedź 172 wizyt
pytanie zadane 16 czerwca 2018 w HTML i CSS przez przemek11 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 672 wizyt
pytanie zadane 24 stycznia 2017 w HTML i CSS przez R.orlinski Mądrala (5,490 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,937 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!

...