如何使用innerHTML平滑地进行文本过渡,并在更改时淡入/淡出?

时间:2019-02-08 01:16:35

标签: javascript html transition

这是我的第一篇文章,因此,如果我对发布格式或其他内容不太满意,请原谅我。因此,我正在为一个游戏团队编写一个网站,他们希望他们的名册(其中有包含玩家姓名的盒子)能够扩展,并在您将鼠标悬停在姓名上时提供一些信息。我已经得到它来扩展和更改文本,但它看起来有点突然。有没有一种方法可以使文本更改更流畅?我不能为每一个单独的CSS,因为至少会有20个CSS。到目前为止,我的进展如下。提前致谢!

    function replace(element, replacement) {
      element.innerHTML = replacement;
    }

    function unreplace(element, replacement) {
      element.innerHTML = replacement;
    }
.box {
  background-color: #81C441;
  display: inline-block;
  margin: 0px 10px;
  text-align: center;
  line-height: 180px;
  width: 200px;
  height: 180px;
  margin-bottom: 20px;
  font-family: arial;
  transition: 1s;
  transform: scale(1.0);
}

.box:hover {
  transition: 1s;
  transform: scale(1.1);
}
<div class="boxcontainer">
  <div onmouseover="replace(this, 'ROLE')" onmouseout="unreplace(this, 'NAME')" class="box w3-center w3-animate-top">NAME</div>
</div>

1 个答案:

答案 0 :(得分:4)

您不能(轻松)为content的变化设置动画-例如,无法为font-family设置动画。

但是,您可以将两个文本重叠,只需将它们悬停在父元素上而不使用JS即可更改其属性。

包含演示

.wrapper {
   position: relative;
}

.toHide, .toShow {
  transition: opacity 1s ease-in-out;
  position: absolute;
}

.toShow {
  opacity: 0;
}

.wrapper:hover .toHide {
  opacity: 0;
}

.wrapper:hover .toShow {
  opacity: 1;
}
<div class="wrapper">
  <span class="toHide">NAME</span>
  <span class="toShow">POSITION</span>
</div>
<br>
<div class="wrapper">
  <span class="toHide">NAME</span>
  <span class="toShow">POSITION</span>
</div>
<br>
<div class="wrapper">
  <span class="toHide">NAME</span>
  <span class="toShow">POSITION</span>
</div>
<br>
<div class="wrapper">
  <span class="toHide">NAME</span>
  <span class="toShow">POSITION</span>
</div>