gpt4 book ai didi

javascript - 单击后如何保持链接悬停动画?

转载 作者:行者123 更新时间:2023-12-02 16:11:58 28 4
gpt4 key购买 nike

我试图在点击后保持链接悬停效果。这是我目前拥有的:

HTML:

    <div class="nav-desktop">
<ul class="desktop-list">
<li class="desktop-link"><a class="link is-active" href="index.html">Home</a></li>
<li class="desktop-link"><a class="link" href="html/about.html">About</a></li>
<li class="desktop-link"><a class="link" href="html/blog.html">Blog</a></li>
<li class="desktop-link"><a class="link" href="html/projects.html">Projects</a></li>
<li class="desktop-link"><a class="link" href="html/contact.html">Contact</a></li>
</ul>
</div>

CSS:

.link {
color: var(--dracula-pink);
padding: 5px 5px 5px 5px;
margin-right: 5rem;
text-decoration: none;
font-size: 1.2rem;
text-transform: uppercase;
text-shadow: 0 2px 3px rgba(0, 0, 0, 0.4), 0 8px 13px rgba(0, 0, 0, 0.1), 0 18px 23px rgba(0, 0, 0, 0.1);
}

.link:hover {
background-repeat: repeat-x;
background-position: left 0% bottom -5%;
background-image: linear-gradient(90deg, rgba(139, 233, 253, 1) 0%, rgba(189, 147, 249, 1) 50%, rgba(80, 250, 123, 1) 100%);
background-size: 100% 18%;
transition: ease-in 0.2s;
}

.link.is-active {
background-repeat: repeat-x;
background-position: left 0% bottom -5%;
background-image: linear-gradient(90deg, rgba(139, 233, 253, 1) 0%, rgba(189, 147, 249, 1) 50%, rgba(80, 250, 123, 1) 100%);
background-size: 100% 18%;
}

JS:

const link = document.querySelector(".link");
link.addEventListener("click", toggleActive);

function toggleActive() {
link.classList.toggle("is-active");
};

我知道我必须添加一些东西来消除上一个链接的效果,但在我能想到的每一个变化之后我什至无法把这部分写下来。

最佳答案

您正在使用 el.querySelector()这将只返回找到的第一个匹配元素。您需要获取元素选择器的整个 nodeList,使用 el.querySelectorAll()然后通过循环运行 nodeList 并将您的函数放入 eventListener 中。既然你想删除事件类,有多种方法可以做到这一点。我通过简单地使用 el.forEach 循环将其从所有元素中移除,然后将 classList 设置为event.target函数中的事件。

您可以使用条件来检查哪个元素具有事件类,然后也可以在单击时切换/删除它,但这会在您的函数中增加一些代码。

EDITS:一旦 href 将它们发送到该页面,OP 想要确定在另一个页面上按下了哪个链接。在这种情况下不需要 JS,只需在该页面 HTML 中的相应页面按钮中静态设置类即可。

如果真的要用JS,可以加一个id每个页面的 body 标签,即 contact 页面 --> <body id="Contact">对应于每个导航页面链接按钮的 textContact。然后使用 JS,摆脱 eventListener 并简单地寻找 body.id如果它等于 link.textContent在 nodeList 的循环中设置事件类。

links.forEach(link => document.body.id === link.textContent ? link.classList.add("is-active") : null)

用户点击 Aboutabout.html

^^^^^^^^^^^^^^^^^^^^^^

<li class="desktop-link is-active"><a class="link" href="html/about.html">About</a></li>

这是对原始问题的回答:

//--> you need to get all the elements in the nodeList 
//--> with the class .link --> querySelectorAll()
const links = document.querySelectorAll(".link");
//--> loop over these elements and add the eventListener
links.forEach(link => document.body.id === link.textContent ? link.classList.add("is-active") : null)
.link {
color: var(--dracula-pink);
padding: 5px 5px 5px 5px;
margin-right: 5rem;
text-decoration: none;
font-size: 1.2rem;
text-transform: uppercase;
text-shadow: 0 2px 3px rgba(0, 0, 0, 0.4), 0 8px 13px rgba(0, 0, 0, 0.1), 0 18px 23px rgba(0, 0, 0, 0.1);
}

.link:hover {
background-repeat: repeat-x;
background-position: left 0% bottom -5%;
background-image: linear-gradient(90deg, rgba(139, 233, 253, 1) 0%, rgba(189, 147, 249, 1) 50%, rgba(80, 250, 123, 1) 100%);
background-size: 100% 18%;
transition: ease-in 0.2s;
}

.link.is-active {
background-repeat: repeat-x;
background-position: left 0% bottom -5%;
background-image: linear-gradient(90deg, rgba(139, 233, 253, 1) 0%, rgba(189, 147, 249, 1) 50%, rgba(80, 250, 123, 1) 100%);
background-size: 100% 18%;
}
<body id="Home">
<div class="nav-desktop">
<ul class="desktop-list">
<li class="desktop-link"><a class="link" href="#?is-active">Home</a></li>
<li class="desktop-link"><a class="link" href="#?is-active">About</a></li>
<li class="desktop-link"><a class="link" href="#?is-active">Blog</a></li>
<li class="desktop-link"><a class="link" href="#?is-active">Projects</a></li>
<li class="desktop-link"><a class="link" href="#?is-active">Contact</a></li>
</ul>
</div>

关于javascript - 单击后如何保持链接悬停动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67766737/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com