首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法禁用classList更改

无法禁用classList更改
EN

Stack Overflow用户
提问于 2022-10-19 07:23:33
回答 1查看 30关注 0票数 0

我有几个链接,改变他们的颜色悬停。他们有“朗切斯特”班。下面是其中一个代码(它们是相同的):

代码语言:javascript
复制
<div class="header__lang-container _flex-column-center nav__item-container">
                    <a href="" class="nav__simple-link header__lang lang-switcher">eng</a>
                    <ul class="lang-container">
                        <li><a href="" data-lang="eng" class="lang-container__eng lang-container__item">eng</a></li>
                        <li><a href="" data-lang="ukr" class="lang-container__ukr lang-container__item">ukr</a></li>
                    </ul>
                </div>

这是他们的造型。注意._is是活动的-简单的链接选择器,它会导致问题:

代码语言:javascript
复制
._is-active-simple-link {
    color: rgb(194, 190, 190);
}
    .nav__simple-link {
    transition: color .3s;
    font-weight: bold;
}

我要做的是在单击链接(保持链接处于活动状态)之后禁用这个类的切换,当我再次单击该链接时,应该再次启用悬停效果,但由于某种原因,这是行不通的。

代码语言:javascript
复制
const lang_switchers = document.querySelectorAll('.lang-switcher');
let isSwitcherOpen = false;
lang_switchers.forEach(elem => {
        elem.addEventListener('click', (e) => {
            e.preventDefault();
            if(!isSwitcherOpen) {
                hoveredLink();
                makeLinkInactive();
            }
            else {
                unhoveredLink();
                makeLinkActive();
            }
            isSwitcherOpen = !isSwitcherOpen;
        });

        makeLinkActive();

        function makeLinkActive() {
            elem.addEventListener('mouseover', hoveredLink);
            elem.addEventListener('mouseout', unhoveredLink);
        }

        function makeLinkInactive() {
            elem.removeEventListener('mouseover', hoveredLink);
            elem.removeEventListener('mouseout', unhoveredLink);
        }

        function hoveredLink() {
            elem.classList.add('_is-active-simple-link');
        }

        function unhoveredLink() {
            elem.classList.remove('_is-active-simple-link');
        }
    });
EN

回答 1

Stack Overflow用户

发布于 2022-10-19 08:29:28

问题是您的mouseover事件不起作用。

试试这个:

现在应该再次启用悬停效果。

代码语言:javascript
复制
const lang_switchers = document.querySelectorAll('.lang-switcher');
var isSwitcherOpen = false;
lang_switchers.forEach(elem => {
    elem.addEventListener('click', (e) => {
        e.preventDefault();
        if (!isSwitcherOpen) {
            hoveredLink();
            makeLinkInactive();
        }
        else {
            unhoveredLink();
            makeLinkActive();
        }
    });

    window.addEventListener('mouseover',()=>{
        elem.classList.remove('_is-active-simple-link');
    });

    function hoveredLink() {
        elem.classList.add('_is-active-simple-link');
    }

    function unhoveredLink() {
        elem.classList.remove('_is-active-simple-link');
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74121350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档