当窗口浏览器调整大小或单击某些元素时,我有一个函数会被多次调用。
此函数根据子项宽度(变量 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 和其他东西......)
对不起我的英语,我是法国人。