Cycle2初始化事件未触发

iiz*_*iiz 8 jquery events jquery-cycle2

我正在使用Cycle2作为基本的旋转木马.我的幻灯片项有时在他们的数据中有一个url,因此我必须使用Cycle2 api事件来使用该URL.

我的问题是,当'cycle-after'事件触发时,没有任何初始化事件会触发.所以如果我的第一张幻灯片有一个网址,则没有任何反应.这是我的代码:

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();
    }
}
});
Run Code Online (Sandbox Code Playgroud)

第一个事件永远不会触发,但是当我滚动幻灯片时,'cycle-after'事件工作正常.我还尝试了从未触发过的'cycle-initialized'事件,以及仅在滚动后但未在初始化时触发的'cycle-update-view'事件.

是什么赋予了?&thnx提前:}

Cycle2活动文档

veg*_*sta 19

我刚遇到同样的问题.

来自FAQ

为什么循环初始化事件不会触发?

它确实如此,我保证.但是如果你在事件监听器已经解雇后绑定它,那么你就不会听到它.仔细检查你是不是太晚了.

必须在运行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();
    }
}
});
Run Code Online (Sandbox Code Playgroud)

改为:

$(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();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

记下.pressSlideshow选择器,因为你的选择器可能不同.

干杯

  • 作为对其他读者的警告,请确保您没有声明性地使用父div上的类初始化循环插件,如下所示:class ="cycle-slideshow"相反,删除该类,并在您之后显式调用.cycle()我们连接了你的事件处理程序. (2认同)