2012-03-08 3 views
1

Malsup's jQuery Cycle pluginjCarouselを使用して、ページのサムネイルを横方向にスクロールさせて正常に動作させるようにしています。問題は、jcarouselプラグインが初期化されないことがあることです。なぜなら、ページネーションがまだ準備されていないと考えているからです。私のコードは次のようになります。ページが読み込まれたときにjQueryサイクル・プラグイン - ポケットベルがいつ準備されているかを知る方法はありますか?

$('#slideshow').cycle({ 
    timeout : 0, 
    speed : 1000, 
    pager : '#image-carousel ul', 
    pagerAnchorBuilder: function(idx, slide) { 
     return '<li><a href="#"><img src="' + slide.src + '" width="107" height="80" /></a></li>'; 
    } 
}); 

$('#image-carousel').jcarousel(); 

時々jcarouselが動作しない、私は2秒程度の初期化を遅らせるためのsetTimeoutを使用し、それはので、私はそれが原因で時々ポケットベルでなければならないと仮定するたびに働いていましたまだ準備ができていません。私は今のところsetTimeoutソリューションで暮らすことができますが、これを処理するにはより良い方法が必要だと思います。

答えて

2

回避策として、サイクルプラグインのソースコードを変更するのに慣れている場合は、onPagerBuilt(または何か)というコールバックを含めることができます。そのようなcycle.jsにbuildPager()機能を変化させる:

function buildPager(els, opts) { 
    var $p = $(opts.pager); 
    $.each(els, function(i,o) { 
     $.fn.cycle.createPagerAnchor(i,o,$p,els,opts); 
    }); 
    opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass); 

     // add this line 
     if (typeof opts.onPagerBuilt == 'function') opts.onPagerBuilt(); 
}; 

次に、あなたがどこかにそのリスト内$.fn.cycle.defaultsにデフォルトを追加することをお勧めします:

$.fn.cycle.defaults = { 
    onPagerBuilt: null, // the callback to be run after pagination is built. 

    // rest of the default options 
    //... 
} 

次に、あなたのスクリプトはそうのように次のようになります。

$('#slideshow').cycle({ 
    timeout : 0, 
    speed : 1000, 
    pager : '#image-carousel ul', 
    pagerAnchorBuilder: function(idx, slide) { 
     return '<li><a href="#"><img src="' + slide.src + '" width="107" height="80" /></a></li>'; 
    }, 
    onPagerBuilt: function() { 
     $('#image-carousel').jcarousel(); 
    } 
}); 
+0

完璧な、この問題は多くのおかげで修正されました! – javiervd

関連する問題