1

当窗口浏览器调整大小或单击某些元素时,我有一个函数会被多次调用。

此函数根据子项宽度(变量 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 和其他东西......)

对不起我的英语,我是法国人。

4

0 回答 0