【发布时间】:2021-04-16 03:33:25
【问题描述】:
我在 JavaScript (JS) 中制作了一个文本动画,其中悬停的单词会随着时间的推移逐个字母地改变颜色。我只想在单词不再悬停时重置文本动画。
但是,当我将鼠标悬停在单词上并将光标移到单词中的另一个字母上时,悬停动画会重置。有人可以解释它为什么会这样以及我如何能够解决这个问题吗?
const home = document.querySelector("#home");
const homeText = home.textContent;
const splitHomeText = homeText.split("");
home.textContent = "";
for (let i = 0; i < splitHomeText.length; i++) {
home.innerHTML += "<span>" + splitHomeText[i] + "</span>";
}
let char = 0;
let timer = null;
home.addEventListener("mouseover", highlight);
home.addEventListener("mouseout", clear);
function highlight() {
timer = setInterval(onTickHome, 50);
}
function onTickHome() {
const span = home.querySelectorAll("span")[char];
span.classList.add("highlight");
char++;
if (char === splitHomeText.length) {
complete();
return;
}
}
function complete() {
char = 0;
clearInterval(timer);
}
function clear() {
char = 0;
clearInterval(timer);
for (let i = 0; i < splitHomeText.length; i++) {
const span = home.querySelectorAll("span")[i];
span.classList.remove("highlight");
}
}
#home {
text-decoration: none;
color: black;
font-size: 30px;
}
.highlight {
color: #EF233C;
}
<a href="#" id="home">Home</a>
【问题讨论】:
标签: javascript html css