我有一个包含一些元素的 div。当用户选择一个按钮时,div 将被清除并动态填充新内容。我在清除 div 之前和填充它之后运行 slideToggle。隐藏 div 的第一个切换工作正常。第二个 slideToggle 没有运行(新的 div 只是加载而没有动画)。
我花了几个小时尝试不同的事情(回调函数、.on、承诺、将第二个 slideToggle 函数放在代码的不同部分,等等)。我终于通过使用 1 毫秒的 setTimeout 来让它工作。尽管它有效,但我比以往任何时候都更加困惑,并且质疑我生活中的一切。请帮助我了解发生了什么。
工作代码:
changeCat:function(catName){
domObject.$positionsDiv.slideToggle(function(){
domObject.$positionsDiv.html('');
let yourCategories = getSubFolders(catName+"/");
if(catName==='s'){
tSCat.drawCats(yourCategories);
} else if(catName==='g'){
tGCat.drawCats(yourCategories);
}
setTimeout(function (){
domObject.$positionsDiv.slideToggle(function(){
resizeCanvas()
});
}, 1)
});
},
真正让我困惑的是,如果我控制台记录目标 div 的高度。
我希望最后调用的控制台日志(“高度 5”)首先被调用。
div 高度(“高度 3”)是在我调用第二个切换之前完全填充的 div 的高度(那么为什么它不起作用?)。
非工作代码(无超时,带有控制台日志)
changeCat:function(catName){
domObject.$positionsDiv.slideToggle(function(){
console.log('height 1: ' + domObject.$positionsDiv.height())
domObject.$positionsDiv.html('');
console.log('height 2: ' + domObject.$positionsDiv.height())
let yourCategories = getSubFolders(catName+"/");
if(catName==='s'){
tSCat.drawCats(yourCategories);
} else if(catName==='g'){
tGCat.drawCats(yourCategories);
}
console.log('height 3: ' + domObject.$positionsDiv.height())
domObject.$positionsDiv.slideToggle(function(){
console.log('height 4: ' + domObject.$positionsDiv.height())
resizeCanvas()
});
});
console.log('height 5: ' + domObject.$positionsDiv.height())
},
控制台日志按此顺序返回,具有以下值:
height 5: 359.333
height 1: 2214
height 2: 0
height 3: 3744
height 4: 324
心有法竹
相关分类