根据该指南,我一直在设计内容过滤器以用于我的投资组合:
https://www.w3schools.com/howto/howto_js_filter_elements.asp
效果很好,但是我遇到了一个问题,原因是我不完全理解示例链接中包含的JS。添加和删除了“ show”类以过滤内容,但是由于它依赖于display:none
和display: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:flex
和display:none
的切换之间进行某种动画处理。