@Mikhail_Litvinov
начинающий web-разработчик

Почему submenu работает неправильно?

Всем привет!

Только-только решил свой прошлый вопрос с сабменю, а сюрпризы не кончились.

Суть вопроса: почему активный класс присваивается двум div'ам, если курсор наводится снизу вверх. работает нормально, если курсор наводится сверху вниз и как это все исправить, чтобы активный класс присваивался одному блоку, независимо от траектории наведения мыши?

вот js-код:
let menuBtns = document.getElementsByClassName("menu-btn");
let main = document.getElementById("main");
let about = document.getElementById("about");
let gallery = document.getElementById("gallery");
let forWomen = document.getElementById("forwomen");
let forMen = document.getElementById("formen");
let baby = document.getElementById("baby");
let blog = document.getElementById("blog");
let mainSub = document.getElementById("main-sub");
let aboutSub = document.getElementById("about-sub");
let gallerySub = document.getElementById("gallery-sub");
let forWomenSub = document.getElementById("forwomen-sub");
let forMenSub = document.getElementById("formen-sub");
let babySub = document.getElementById("baby-sub");
let blogSub = document.getElementById("blog-sub");
let timeout = null;
let subMenu = document.getElementsByClassName("sub-nav");
var i;

$(menuBtns).mouseenter (function(){
    this.className += " active";
    if (main.classList.contains("active")) {
        mainSub.classList.add("active");
    }
    if (about.classList.contains("active")) {
        aboutSub.className += " active";
    }
    if (gallery.classList.contains("active")) {
        gallerySub.className += " active";
    }
    if (forWomen.classList.contains("active")) {
    forWomenSub.className += " active";
    }
    if (forMen.classList.contains("active")) {
    forMenSub.className += " active";
    }
    if (baby.classList.contains("active")) {
    babySub.className += " active";
    }
    if (blog.classList.contains("active")) {
    blogSub.className += " active";
    }
}).mouseleave (function (){
    timeout = setTimeout(() => {
        this.classList.remove("active");
        mainSub.classList.remove("active");
        aboutSub.classList.remove("active");
        gallerySub.classList.remove("active");
        forWomenSub.classList.remove("active");
        forMenSub.classList.remove("active");
        babySub.classList.remove("active");
        blogSub.classList.remove("active");
    }, 100)    
})

$(subMenu).mouseenter (function(){
    clearTimeout(timeout);
}).mouseleave (function (){
    timeout = setTimeout(() => {
        this.classList.remove("active");
        mainSub.classList.remove("active");
        aboutSub.classList.remove("active");
        gallerySub.classList.remove("active");
        forWomenSub.classList.remove("active");
        forMenSub.classList.remove("active");
        babySub.classList.remove("active");
        blogSub.classList.remove("active");
    }, 100)
})


и, собственно, html,css
<div class="flex nav-wrapper">
                    <ul class="nav-list">
                        <li><a href="#" target="_blank" rel="noopener noreferrer"  class="menu-btn" id="main"><span id="home-page">Главная</span></a></li>
                        <li><a href="#" target="_blank" rel="noopener noreferrer"  class="menu-btn" id="about"><span id="about-page">О нас</span></a></li>
                        <li><a href="#" target="_blank" rel="noopener noreferrer"  class="menu-btn" id="gallery"><span id="gallery-page">Галерея</span></a></li>
                        <li><a href="#" target="_blank" rel="noopener noreferrer"  class="menu-btn" id="forwomen"><span id="for-women-page">Для женщин</span></a></li>
                        <li><a href="#" target="_blank" rel="noopener noreferrer"  class="menu-btn" id="formen"><span id="for-men-page">Для мужчин</span></a></li>
                        <li><a href="#" target="_blank" rel="noopener noreferrer"  class="menu-btn" id="baby"><span id="for-children-page">Десткое</span></a></li>
                        <li><a href="#" target="_blank" rel="noopener noreferrer"  class="menu-btn" id="blog"><span id="blog-page">Новости</span></a></li>
                    </ul>
                </div>
                <div class="flex sub-nav-main-wrapper sub-nav" id="main-sub"></div>
                <div class="flex sub-nav-about-wrapper sub-nav" id="about-sub"></div>
                <div class="flex sub-nav-gallery-wrapper sub-nav" id="gallery-sub"></div>
                <div class="flex sub-nav-forwomen-wrapper sub-nav" id="forwomen-sub"></div>
                <div class="flex sub-nav-formen-wrapper sub-nav" id="formen-sub"></div>
                <div class="flex sub-nav-baby-wrapper sub-nav" id="baby-sub"></div>
                <div class="flex sub-nav-blog-wrapper sub-nav" id="blog-sub"></div>

.nav {
    width: 100%;
    height: auto;
}

.nav-wrapper {
    width: 100%;
    height: 40px;
    margin: 0 auto;
}

.nav-list {
    display: flex;
    width: fit-content;
    margin: 0;
    margin-left: auto;
    margin-right: auto;
    align-self: center;
}

.nav-list li {
    margin: 0;
    padding: 0 30px;
    text-align: center;
    font-size: 18px;
}

.nav-list li a {
    position: relative;
}

.nav-list li a::after {
    background-color: #CD7F32;
    display: block;
    content: "";
    height: 1px;
    width: 0%;
    left:50%;
    position:absolute;
    -webkit-transition: width 0.3s ease-in-out;
    -moz--transition: width 0.3s ease-in-out;
    transition: width 0.3s ease-in-out;
    -webkit-transform:translateX(-50%);
    -moz-transform:translateX(-50%);
    transform:translateX(-50%);
}

.nav-list li a:hover::after {
    width: 100%;
}

/* sub menu */

.sub-nav-main-wrapper, .sub-nav-about-wrapper, .sub-nav-gallery-wrapper, .sub-nav-forwomen-wrapper, 
.sub-nav-formen-wrapper, .sub-nav-main-wrapper, .sub-nav-baby-wrapper, .sub-nav-blog-wrapper{
    width: 100%;
    height: 0;
    background-color: slategrey;
    transition: 0.5s ease-in-out;
}

.sub-nav-main-wrapper.active, .sub-nav-about-wrapper.active, .sub-nav-gallery-wrapper.active, .sub-nav-forwomen-wrapper.active, 
.sub-nav-formen-wrapper.active, .sub-nav-main-wrapper.active, .sub-nav-baby-wrapper.active, .sub-nav-blog-wrapper.active {
    height: 200px;
}

/* sub menu end */


весь проект можно посмотреть тут.

Пожалуйста, не кидайтесь тапками, я только начинаю познавать прелести вашего веб-мира.
  • Вопрос задан
  • 18 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы