我有一个在调整窗口浏览器大小或者点击某些元素时多次调用的函数。
此函数根据子项宽度(变量colW)计算容器的正确宽度。似乎当我的函数执行时,colW变量未正确获取或者它不是正确的宽度(它是先前计算的宽度)。 此colW变量根据窗口大小计算。
如果我发出警报(colW),一切正常。在这种情况下,变量是正确的。
我不知道如何解决这个问题。也许我没有正确设置我的变量,或者我需要确保之前的功能是在执行下一个功能之前完成的。
这是我的剧本:
function checkSly() {
//alert(colW);
numNormal = $('.element:not(.square,.wide,.tall,.isotope-hidden)').length;
numSquare = $('.element.square:not(.isotope-hidden)').length;
numWide = $('.element.wide:not(.isotope-hidden)').length;
numTall = $('.element.tall:not(.isotope-hidden)').length;
totalelement = numNormal+numSquare*4+numWide*2+numTall+3;
columnswidth = Math.ceil((totalelement)/HIsotopeRows)*colW;
slideewidth = Math.round(columnswidth);
$('#container').width(slideewidth);
frame.reload();
}
修改
如果我添加一个setTimeout,该变量有时间计算(因为colW宽度为某些元素设置动画)并且效果很好:
function checkSly() {
setTimeout(function() {
numNormal = $('.element:not(.square,.wide,.tall,.isotope-hidden)').length;
numSquare = $('.element.square:not(.isotope-hidden)').length;
numWide = $('.element.wide:not(.isotope-hidden)').length;
numTall = $('.element.tall:not(.isotope-hidden)').length;
totalelement = numNormal+numSquare*4+numWide*2+numTall+3;
columnswidth = Math.ceil((totalelement)/HIsotopeRows)*colW;
slideewidth = Math.round(columnswidth);
$('#container').width(slideewidth);
frame.reload();
}, 300);
}
我想我需要等待所有动画完成才能调用checkSly()函数... 有没有办法在执行函数之前等待动画完成?因为使用setTimeout它不会一直有效(因为动画取决于浏览器类型,CPU和其他东西....)
对不起我的英语,我是法国人。