0

私はこのコードのセクションを持っています (私が混乱している場所を指摘します。誰かが本当に掘り下げたいと思った場合に備えて、その巨大な壁を追加しただけです)。

とにかく、動作はこれらのボックスを表示することです。ボックスをクリックすると、ボックスが展開され、詳細情報が表示されます。これは 70% の確率で機能しますが、画像がキャッシュされていない場合に、ボックスをもう一度クリックして最小化すると、最小化が開始されてから元に戻るようです。これが次の行と関係があるかどうか疑問に思っています:if($(this)[0].style.width == '70%'){

これで十分でない場合は、お気軽にお問い合わせください。問題を再現したい場合は、次の手順を実行してください。

http://newgameplus.nikuai.net/

いくつかのゲームを検索して、結果をクリックしてみてください。(それは私の言っていることが意味をなさない場合に限られますが)

ありがとうございました。

$container.on("click", ".box", function (event) {
    var description;
    var user_id;
    var org_img = $(this).find("img").attr("src");
    if ($(this)[0].style.width == '70%') {
        $(this).find("img").attr("src", org_img);
        $(this).css('width', '18%');
        $(this).find(".resultData").fadeOut('slow');
        $container.masonry('reload');
    } else {
        var me = this;
        value['name'] = $(me).find("p").html();
        oldImage = $(this).find("img").attr("src");
        $.ajax({
            url: 'scripts/php/fetchResultsData.php',
            data: {
                action: value
            },
            type: 'post',
            dataType: 'json',
            success: function (data) {
                description = data[0][2];

                for (var i = 0; i < $test.length; i++) {
                    if ($test[i][1][2]['name'] == value['name']) {
                        pos = i;
                        break;
                    }
                }

                $(me).find("img").attr("src", data[0][4]);
                $(me).css('width', '70%');

                $(me).append("\
                                        <div class='resultData'>\
                                            <div class='resultName'>" + value['name'] + "</div>\
                                            <div class='resultDesc'>" + description + "</div>\
                                            <div class='reasonDataTitle'> Similar tropes between this game and the searched games </div>\
                                            <div class='reasonData'>" + $test[pos][4] + "</div>\
                                            <div class='wikiLink'><a href='http://wikipedia.org/wiki/" + value['name'] + "'>Wikipedia</a></div>\
                                            <div class='resultLike'></div>\
                                        </div>");
                value['clicked'] = 0;
                $.ajax({
                    url: 'scripts/php/userProfile.php',
                    data: {
                        action: value
                    },
                    type: 'post',
                    dataType: 'json',
                    success: function (profileData) {
                        if (profileData == 'alreadyAdded') {
                            $(me).children('.resultData').children('.resultLike').html('un-Favourite');
                        } else if (profileData == 'notLoggedIn') {
                            $(me).children('.resultData').children('.resultLike').html('Login to add');
                        } else {
                            $(me).children('.resultData').children('.resultLike').html('Favourite?');
                        }
                    }
                });
                $(me).on("click", '.resultLike', function (event) {
                    event.stopPropagation()
                    value['clicked'] = 1;
                    $.ajax({
                        url: 'scripts/php/userProfile.php',
                        data: {
                            action: value
                        },
                        type: 'post',
                        dataType: 'json',
                        success: function (profileData) {
                            if (profileData == 'removed') {
                                $(me).children('.resultData').children('.resultLike').html('Favourite?');
                            } else if (profileData == 'notLoggedIn') {
                                $(me).children('.resultData').children('.resultLike').html('Login to add');
                            } else {
                                $(me).children('.resultData').children('.resultLike').html('un-Favourite');
                            }
                        }
                    });
                });
                $container.masonry('reload');
            }

        });
    }
});
4

1 に答える 1

2

効果コードに競合状態があると思われます。jQuery エフェクトは非同期で実行されるため、終了後ではなく開始$container.masonry('reload')時に呼び出されます。fadeOutjQuery Masonry プラグインが、フェードアウトしているブロックの表示に影響を与える場合 (そしてそのドキュメントがその可能性が高いことを示しています)、一度に実行される両方の関数の競合状態は、最初の 1 つをキャンセルします。

これを回避するには、以下のように へのコールバック関数で Masonry reload を実行してみてくださいfadeOut

$(this).find(".resultData").fadeOut('slow', function () {
    $container.masonry('reload');
});

時々しか発生しない理由は、物事が読み込まれる速度に基づいており、特定のアセットがキャッシュされていない場合にのみ発生する理由を説明しています.

于 2012-07-31T18:12:54.427 に答える