1

これが起こるべきことです。
1. クリックされたリンクの rel 属性を取得します
2. クラス 'entry' を持つすべての div について:
(i) その 'left' 位置を取得します
(ii) その外側の高さを計算し
ます (iii) 'a.tag_filter' のすべてのインスタンスをループします. 「rel」内に、最初にクリックした文字列と同じ文字列が見つかった場合は、「V」に 1 を追加して、ループから抜け出します。
(iv) ループの後で「V」が 0 の場合、同じタグがその「.entry」内に存在しないことがわかっているので、フェード アウトします。
(v) フェードアウトが終了したら、フェードアウトした後のすべての「.entry」をループし、それらの「左」の値を取得します。
(vi) フェード エントリの左の値 = 現在の「.entry」の左の値の場合

現在起こっていること。
すべての正しい「.entry」要素を実行してフェードアウトし、それらがすべてフェードアウトした後にのみ、残りの「.entry」要素を再配置します。

各要素がフェードアウトした後、再配置ループを実行して、残りの要素を一度にすべてではなく 1 つずつ配置するようにします。

Heres私のコード編集:

$('a.tag_filter').click(function(e){
        e.preventDefault();
        var selectTag = $(this).attr('rel');

    $('div.spotlight_entry_container_grid').each(function(i){
        var $entry = $(this);
        var tagArray = [];

        $('a.tag_filter', this).each(function(){
            tagArray.push ($(this).attr('rel'));
        }); 

        if($.inArray(selectTag,tagArray) == -1){
            var leftPos = $entry.css("left"); 
                    var topPos = $entry.css("top"); 

            $entry.fadeOut(1000, function(){
                var nextLeftPos;
                            var nextTopPos;

                $('div.spotlight_entry_container_grid:gt('+i+')').each(function(j) {   
                    var $laterEntry = $(this); 
                    nextLeftPos = $laterEntry.css("left");
                                nextTopPos = $laterEntry.css("top");
                    //we need to keep the entries in their columns.
                    //matching left values will do it. No need to animate left values.
                    if(leftPos == nextLeftPos){
                        $laterEntry.animate({ top: topPos});
                    }
                    }); 
            });
        }   
    });
    });

うまくいけば、それが理にかなっています
。私はおそらく何かおかしなことをしているのですが、それを見つけることができません。ありがとう

4

2 に答える 2

0

$(this) をキャッシュする必要はありません。jQuery は関数コールバック用に this セレクターを自動キャッシュします。

于 2010-07-21T20:59:39.997 に答える