有没有一种方法可以使使用display:none的内容过滤动画化?

时间:2019-04-03 17:46:51

标签: javascript css animation flexbox portfolio

根据该指南,我一直在设计内容过滤器以用于我的投资组合:

https://www.w3schools.com/howto/howto_js_filter_elements.asp

效果很好,但是我遇到了一个问题,原因是我不完全理解示例链接中包含的JS。添加和删​​除了“ show”类以过滤内容,但是由于它依赖于display:nonedisplay:flex,因此无法进行动画处理并且目前在视觉上很粗糙。

我曾尝试使用高度,宽度,不透明度和可见性,但正如您所想象的那样,如果没有display:none,我的网站上将会留有很大的空间。这是一个粗略的小提琴,显示了我的作品集以及设置动态内容和过滤的方式。

https://jsfiddle.net/qc35ghpd/

下面是w3schools网站上的JS。

<style>
.filterDiv {
  opacity: 0;
  transition: opacity 1s ease 0s;
  display: none;
}

.show {
  opacity: 1;
  transition: opacity 1s ease 0s;
  display:flex;
}
</style>
<script>
filterSelection("all")
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all") c = "";
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}

function w3AddClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    if (arr1.indexOf(arr2[i]) == -1) {element.className += " " + arr2[i];}
  }
}

function w3RemoveClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    while (arr1.indexOf(arr2[i]) > -1) {
      arr1.splice(arr1.indexOf(arr2[i]), 1);     
    }
  }
  element.className = arr1.join(" ");
}
</script>

我期望得到的结果是预期的,所以我真的在寻找一种方法来修改上面的代码,以允许在display:flexdisplay:none的切换之间进行某种动画处理。

0 个答案:

没有答案