Javascript 子级展开时,嵌套可折叠文件不能正确显示其内容
从中找到的代码开始,我想创建一个可折叠菜单,它也适用于嵌套内容 var coll=document.getelementsbyclassname可折叠; var i; 对于i=0;iJavascript 子级展开时,嵌套可折叠文件不能正确显示其内容,javascript,html,css,Javascript,Html,Css,从中找到的代码开始,我想创建一个可折叠菜单,它也适用于嵌套内容 var coll=document.getelementsbyclassname可折叠; var i; 对于i=0;i
您应该检查并修改子打开和关闭部分代码上元素的最大高度
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
// from last to first to recalculate parent height after child
for (var j = coll.length - 1; j >= 0; j--) {
if (coll[j].classList.contains('active')) {
console.log(j, coll[j].classList);
var c2 = coll[j].nextElementSibling;
console.log(c2);
c2.style.maxHeight = null;
c2.style.maxHeight = c2.scrollHeight + "px";
}
}
});
}
但若css转换被禁用,上面的代码将起作用,因为js在转换完成之前立即触发
所以,如果需要转换,您可以在转换结束后添加超时来检查修改。大概是这样的:
var coll = document.getElementsByClassName("collapsible");
var i;
var checkCollapsible = function() {
for (var j = coll.length - 1; j >= 0; j--) {
if (coll[j].classList.contains('active')) {
console.log(j, coll[j].classList);
var c2 = coll[j].nextElementSibling;
console.log(c2);
c2.style.maxHeight = null;
c2.style.maxHeight = c2.scrollHeight + "px";
}
}
};
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
window.setTimeout(checkCollapsible, 200);
});
}
还有一些transitionend事件可用。所以对于webkit,您可以使用类似于部分代码的东西
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
content.addEventListener('webkitTransitionEnd', checkCollapsible);
});
}
看
例如。谢谢。但是,对我来说,效果似乎有点难看过渡不是平滑的,滞后是相当大的。我正在考虑使用maxHeight属性遍历并更新父级。。。