0

私はここで頭がいっぱいです。固定幅の div の列をループして条件付きで非表示/表示する .each() 関数があります。列が表示されている場合、前の列はすべてが収まるように縮小され、新しい列が非表示になると元の幅に拡張されます。私のコードは 80% の確率で完全に動作しますが、時々完全にランダムに動作せず、新しい列が表示され、前の列が展開されます。画面の別の場所をクリックすると、すぐに修正されます。何が起こっていますか??

function doLoop(condition) {
    if (condition) {    
        $(".utility-split-rmdr").each(function(index) {
            $(this).prev().animate({width: "97px"}, 200);
            $(this).hide();
        });
    } else {
        $(".utility-split-rmdr").each(function(index) {
            $(this).hide();
            $(this).prev().animate({width: "130px"}, 200);
        });
    }
}
4

1 に答える 1

0

これを試してください:

function doLoop(condition) {
    if(!$(".utility-split-rmdr").is(':animated')) {
        if (condition) {    
            $(".utility-split-rmdr").each(function(index) {
                $(this).prev().animate({width: "97px"}, 200);
                $(this).hide();
            });
        } else {
            $(".utility-split-rmdr").each(function(index) {
                $(this).hide();
                $(this).prev().animate({width: "130px"}, 200);
            });
        }
    }
}

これにより、現在アニメーション化されている列がない場合にのみコードを実行できます。

それでも壊れる場合は、少なくともアニメーションが干渉しているからではないことがわかります.

于 2013-01-04T01:58:37.893 に答える