通过 Javascript 或 CSS 慢慢切换显示和隐藏的 div

Toggle the divs for show and hide slowly via Javascript or CSS

我迈出了 Javascript 的第一步。现在我有一个动画问题。我的代码目前正在正常工作。但我不知道如何让 div 慢慢地而不是立即地“扮演”“角色”。

这是我到现在为止收到的。试图将 .style.transition = "all 2s"; 放在 var x = document.querySelectorAll("#toggle-div"); 后面,像这样 var x = document.querySelectorAll("#toggle-div").style.transition = "all 2s"; 但它并没有真正起作用。

我希望每个 div(3 div 秒)都缓慢切换,而不是突然切换。

这是我的代码目前的样子:

// Toggle all buttons texts

function change() {
  var x = document.querySelectorAll("#button");
  var i;
  for (i = 0; i < x.length; i++) {
    if (x[i].value == "Zeige Features") {
      x[i].value = "Verstecke Features";
    } else {
      x[i].value = "Zeige Features";
    }
  }
}

// Toggle show and hide divs

function showhide() {
  var x = document.querySelectorAll("#toggle-div");
  var i;
  for (i = 0; i < x.length; i++) {
    if (x[i].style.display === "block") {
      x[i].style.display = "none";
    } else {
      x[i].style.display =
        "block";
    }
  }
}
<!--Inserting 3 buttons-->

<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>
<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>
<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>

<!--Inserting 3 divs-->

<div id="toggle-div"> div 1 </div>
<div id="toggle-div"> div 2 </div>
<div id="toggle-div"> div 3 </div>

希望你能帮上忙! :)

长话短说: 您不能为 HTML 元素的 display 属性 设置动画。请改用 opacity 属性。

this answer.

中的其他解决方案

// Toggle all buttons texts

function change(button) {
  var x = document.querySelectorAll(".button");
  for (let i = 0; i < x.length; i++) {
    if (x[i].value == "Zeige Features") {
      x[i].value = "Verstecke Features";
    } else {
      x[i].value = "Zeige Features";
    }
  }
}

// Toggle show and hide divs

function showhide() {
  var x = document.querySelectorAll(".toggle-div");
  for (let i = 0; i < x.length; i++) {
    if (x[i].style.opacity === "0") {
      x[i].style.opacity = "1";
    } else {
      x[i].style.opacity = "0";
    }
  }
}
<!-- Inserting default transition for divs -->

<style>
  div {
    transition: 0.5s;
  }
</style>

<!--Inserting 3 buttons-->

<input onclick="change();showhide()" type="button" value="Verstecke Features" class="button"></input>
<input onclick="change();showhide()" type="button" value="Verstecke Features" class="button"></input>
<input onclick="change();showhide()" type="button" value="Verstecke Features" class="button"></input>

<!--Inserting 3 divs-->

<div class="toggle-div"> div 1 </div>
<div class="toggle-div"> div 2 </div>
<div class="toggle-div"> div 3 </div>

一些附加信息:

  • 不要为多个 HTML 标签提供相同的 ID,请改用 class
  • 如果您的 div 默认可见,您的标签应显示“Versteckere 功能”,以便用户知道您的按钮将做什么

HTML:

<!--Inserting 3 buttons-->

<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>
<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>
<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>

<!--Inserting 3 divs-->

<div class="toggle-div">div 1</div>
<div class="toggle-div">div 2</div>
<div class="toggle-div">div 3</div>

CSS:

div.toggle-div {
  transition: 1s ease-out;
  height: 50px;
  overflow: hidden;
}

div.hidden {
  height: 0;
}

JS:

function change() {
  var x = document.querySelectorAll("#button");
  var i;
  for (i = 0; i < x.length; i++) {
    if (x[i].value == "Zeige Features") {
      x[i].value = "Verstecke Features";
    } else {
      x[i].value = "Zeige Features";
    }
  }
}

// Toggle show and hide divs

function showhide() {
  var x = document.querySelectorAll(".toggle-div");
  for (var i = 0; i < x.length; i++) {
    x[i].classList.toggle('hidden');
  }
}