1

Galleria スクリプト ( http://devkick.com/lab/galleria/ ) とjQueryのアコーディオン ウィジェットを使用して、ギャラリーのサムネイルのさまざまなカテゴリを非表示にするページを作成しています。私の初期化では、両方のスクリプトのマニュアルで提案されているように書きました:

<script type="text/javascript">
        jQuery(function($) { 
        $('ul.gallery').galleria({
         insert: "#image"
        });

         $("#thumbs").accordion();

        });
</script>

このgalleria()関数はサムネイルを作成し、それらに適切なサイズを割り当てます。次に、accordion()関数はそのスタイルを割り当て、現在非表示の要素を折りたたみます。上記のコードでは、寸法がゼロであるために一部のサムネイル画像が見えなくなるという問題があります。

機能でサムネイルにサイズが割り当てられる前にアラートを配置すると、galleria()アコーディオンの非表示ページ内にある画像の場合、その時点でコンテナーの寸法がゼロであることがわかります。accordion()これらの関数は連続して実行され、終了する前に呼び出されないと思っていたので、これは私にとって非常に奇妙ですgalleria()

さらに奇妙なことに、アコーディオン関数の前にアラートを配置すると、すべてが正しい順序で処理されます。

ここで競合状態に直面していることは明らかです。なぜそれが起こるのですか? また、初期化シーケンスを正常に行うにはどうすればよいですか?

4

2 に答える 2

2

これは単なる推測ですが、画像がダウンロードされる前に実行されているスクリプトに関係があると推測しています。alert()これは、アコーディオン関数が機能する前の理由を説明しているようです。画像をロードする機会を与えます。

これが正しい場合は、jQuery のload()イベント ハンドラーを使用して、画像が完全に読み込まれるようにする必要があります。

load() のドキュメント: http://api.jquery.com/load-event/

于 2010-02-20T14:10:32.753 に答える
1

競合状態は、ガレリアがそれらを追加した後、すべての画像がまだダウンロードされていない可能性があるという事実にあると思います。これにより、アコーディオン関数は画像がゼロごとにあると想定します。

アラートの追加が機能する理由は、時間がかかり、それを閉じるまでに画像がダウンロードされているためです。

実行順序を確認したい場合は、アラートのようにスクリプトの実行をブロックしないアラートを使用する代わりに、firebug と console.log を調べてください。

あなたの主な問題に関しては、先に進む前にすべての画像がダウンロードされるように、ガレリアがコールバック機能を提供しているかどうかを調べます.

于 2010-02-20T14:12:20.740 に答える