1

状況は次のとおりです。jcarousel (PHP スクリプトから Ajax を介して動的コンテンツをロードするカルーセル) の基本的な例をベースとして使用しています。

    function mycarousel_itemLoadCallback(carousel, state)
{
    // Check if the requested items already exist
    if (carousel.has(carousel.first, carousel.last)) {
        return;
    }

    jQuery.get(
        'dynamic_ajax_php.php',
        {
            first: carousel.first,
            last: carousel.last
        },
        function(xml) {
            mycarousel_itemAddCallback(carousel, carousel.first, carousel.last, xml);
        },
        'xml'
    );
};

function mycarousel_itemAddCallback(carousel, first, last, xml)
{
    // Set the size of the carousel
    carousel.size(parseInt(jQuery('total', xml).text()));

    jQuery('image', xml).each(function(i) {
        carousel.add(first + i, mycarousel_getItemHTML(jQuery(this).text()));
    });
};

/**
 * Item html creation helper.
 */
function mycarousel_getItemHTML(url)
{
    return '<img src="' + url + '" width="75" height="75" alt="" />';
};

jQuery(document).ready(function() {
    jQuery('#mycarousel').jcarousel({
        // Uncomment the following option if you want items
        // which are outside the visible range to be removed
        // from the DOM.
        // Useful for carousels with MANY items.

        // itemVisibleOutCallback: {onAfterAnimation: function(carousel, item, i, state, evt) { carousel.remove(i); }},
        itemLoadCallback: mycarousel_itemLoadCallback
    });
});

私がやりたいのは、カルーセルの初期化が完了し、画像が dom にありアクセス可能になった直後に関数を実行することです。ただし、これはページロード時にのみ発生するはずです。前または次のボタンが押されるたびにではありません。この問題についての助けをいただければ幸いです。

ありがとうございました

4

2 に答える 2

1

を使用できますinitCallback

$(function(){

  $("#mycarousel").jcarousel({
    initCallback: function(){
      alert("jCarousel is initialized!");
    }
  });

});

Ajax オプションの使用

コメントで ajax オプションを使用していることを示したので、後で画像をロードするために、 を引き続き使用itemLoadCallbackし、単純にフラグ変数をミックスに追加することをお勧めします。

var loadedfirstime = true;
$("#mycarousel").jcarousel({
  itemLoadCallback: function(){
    if (loadedfirsttime) {
      myFunction();
      loadedfirsttime = false;
    }
  }
});

フラグを設定すると、今後のすべてのコールバックで同じ動作が発生しなくなります。

于 2010-01-21T18:15:31.167 に答える
0

ジョナサン、素晴らしい迅速な対応に感謝します。つまり、カルーセルが構築され、画像が dom で利用可能になった後に関数が自動的に呼び出されます。しかし、私はかなり洗練されていない方法をとり、1 秒の遅延に設定されたタイマーを使用しました。これは最も洗練されたソリューションではなく、100% 信頼できるものではないことはわかっていますが、今のところは機能します。

超迅速な対応に感謝します。

于 2010-01-21T20:08:41.867 に答える