8

基本的なカルーセルに Cycle2 を使用しています。スライド アイテムのデータに URL が含まれている場合があるため、Cycle2 API イベントを使用してその URL を使用する必要があります。

私の問題は、「cycle-after」イベントが正常に発生する一方で、どの初期化イベントも発生しないことです。したがって、最初のスライドに URL がある場合、何も起こりません。これは私のコードです:

pressSlideshow.on({
'cycle-post-initialize': function(event) {
    console.log('call');
    var a = $('img.cycle-slide-active');
    var d = a.data('url');
    if (d !== undefined) {
        pressLink.attr('href', a.data('url')).show();
    } else {
        pressLink.hide();
    }
},
'cycle-after': function(event, optionHash, outgoingSlideEl, incomingSlideEl, forwardFlag) {
    var a = $(incomingSlideEl);
    var d = a.data('url');
    if (d !== undefined) {
        pressLink.attr('href', a.data('url')).show();
    } else {
        pressLink.hide();
    }
}
});

最初のイベントは発生しませんが、スライドショーをスクロールすると、「cycle-after」イベントが正常に機能します。また、発生しなかった「cycle-initialized」イベントと、スクロール後にのみ発生し、初期化では発生しなかった「cycle-update-view」イベントも試しました。

何を与える?&事前にthnx :}

Cycle2 イベントのドキュメント

4

1 に答える 1

20

私はちょうどこれと同じ問題を抱えていました。

よくある質問から

サイクル初期化イベントが発生しないのはなぜですか?

そうです、約束します。ただし、イベントリスナーが既に起動した後にバインドすると、聞こえなくなります。拘束力が遅すぎないことを再確認してください。

cycle() init メソッドを実行する前に、イベントをバインドする必要があります。

コードを次のように設定すると仮定します。

var pressSlideshow = $('.pressSlideshow').cycle();

pressSlideshow.on({
'cycle-post-initialize': function(event) {
    console.log('call');
    var a = $('img.cycle-slide-active');
    var d = a.data('url');
    if (d !== undefined) {
        pressLink.attr('href', a.data('url')).show();
    } else {
        pressLink.hide();
    }
},
'cycle-after': function(event, optionHash, outgoingSlideEl, incomingSlideEl, forwardFlag) {
    var a = $(incomingSlideEl);
    var d = a.data('url');
    if (d !== undefined) {
        pressLink.attr('href', a.data('url')).show();
    } else {
        pressLink.hide();
    }
}
});

代わりにこれを行います:

$(document).on('cycle-post-initialize', '.pressSlideshow', function(){
    console.log('call');
    var a = $('img.cycle-slide-active');
    var d = a.data('url');
    if (d !== undefined) {
        pressLink.attr('href', a.data('url')).show();
    } else {
        pressLink.hide();
    }
});

var pressSlideshow = $('.pressSlideshow').cycle();

pressSlideshow.on({
    'cycle-after': function(event, optionHash, outgoingSlideEl, incomingSlideEl, forwardFlag) {
        var a = $(incomingSlideEl);
        var d = a.data('url');
        if (d !== undefined) {
            pressLink.attr('href', a.data('url')).show();
        } else {
            pressLink.hide();
        }
    }
});

.pressSlideshowセレクターが異なる可能性があるため、セレクターに注意してください。

乾杯

于 2013-05-29T11:21:46.237 に答える