颜色过渡不适用于 setTimeout。元素应该看起来很流畅

Color transition not working with setTimeout. Element should appear smoothy

颜色过渡有效,如果我不隐藏元素然后让它出现。

const name = document.querySelector(".name");

setTimeout(() => {
  name.classList.remove("hide");
  name.classList.add("color-blue")
  // name.style.color = "blue";
}, 2000)
.name {
  background-color: orange;
  display: inline-block;
  padding: 5px;
  transition: color 10s;
  color: transparent;
}
.color-blue { color: blue; }

.hide { display: none }
<div class="name hide">
  Lebron James
</div>

如果我不使用 class 隐藏并且我以后也没有将其删除,则过渡有效。通过隐藏它,它不起作用。

不知道发生了什么

感谢您的帮助

使用opacity设置opacity:0隐藏元素。

了解 opacity:https://www.w3schools.com/css/css_image_transparency.asp

const name = document.querySelector(".name");

setTimeout(() => {
  name.classList.remove("hide");
  name.classList.add("color-blue")
  // name.style.color = "blue";
}, 2000)
.name {
  background-color: orange;
  display: inline-block;
  padding: 5px;
  transition: color 10s;
  color: transparent;
}
.color-blue { color: blue; }

.hide { opacity:0; }
<div class="name hide">
  Lebron James
</div>

这是工作代码

const name = document.querySelector(".name");

setTimeout(() => {
  name.classList.remove("hide");
  name.classList.add("color-blue")
  // name.style.color = "blue";
}, 2000)
.name {
  background-color: orange;
  display: inline-block;
  padding: 5px;
  transition: color 10s;
  color: transparent;
}
.color-blue { color: blue; }

.hide { opacity: 0 }
<div class="name hide">
  Lebron James
</div>

http://jsfiddle.net/Aravi/39pdLarn/2/

显示在动画方面有限制,但您可以使用可见性和不透明度进行过渡。

那是因为你使用的是display: none;.

如果将 display 设置为 none

CSS 将无法显示动画。您可以使用 opacity: 0 来隐藏元素,但请记住将其添加到 transition 中,否则它不会显示任何颜色过渡。

const name = document.querySelector(".name");

setTimeout(() => {
  name.classList.add("hide");
  name.classList.add("color-blue")
  // name.style.color = "blue";
}, 2000);
.name {
  background-color: orange;
  display: inline-block;
  padding: 5px;
  transition: color 10s, opacity 10s;
  color: transparent;
}

.color-blue {
  color: blue;
}

.hide {
  opacity: 0;
}
<div class="name">
  Lebron James
</div>

或者,如果您想使用 display: none(即从 DOM 中删除元素),那么您可以按如下方式更新您的 JS 代码:

const name = document.querySelector(".name");

setTimeout(() => {
  setTimeout(() => {
    name.classList.add("hide");
  }, 10000);
  name.classList.add("color-blue")
  // name.style.color = "blue";
}, 2000)
.name {
  background-color: orange;
  display: inline-block;
  padding: 5px;
  transition: color 10s;
  color: transparent;
}

.color-blue {
  color: blue;
}

.hide {
  display: none
}
<div class="name">
  Lebron James
</div>