使用Cycle2的自适应轮播

时间:2014-01-07 20:10:28

标签: javascript jquery responsive-design carousel jquery-cycle2

我正在使用cycle2cycle2-carousel插件处理旋转木马。

找到一个solution here来显示可变数量的项目,具体取决于调整后的窗口宽度。

问题是旋转木马由于另一张幻灯片而中断。

一切正常,直到主幻灯片循环播放第一张幻灯片,然后在页面调整大小时,轮播只显示一张幻灯片。

演示

http://jsfiddle.net/yDRj4/1/

的jQuery

function buildCarousel(visibleSlides) {
    $('.caro').cycle({
        fx: 'carousel',
        speed: 600,
        slides: 'img',
        carouselVisible: visibleSlides,
        carouselFluid: true
    });
}
function buildSlideshow() {
    $('.home-slideshow').cycle({
        fx: 'fade',
        slides: 'img',
        timeout: 12000
    });
}

function initCycle() {
    var width = $(document).width();
    var visibleSlides = 5;

    if ( width < 400 ) {visibleSlides = 1}
    else if(width < 700) {visibleSlides = 3}
    else {visibleSlides = 5};

    buildSlideshow();
    buildCarousel(visibleSlides);
}

function reinit_cycle() {
    var width = $(window).width();
    var destroyCarousel = $('.caro').cycle('destroy');

    if ( width < 400 ) {destroyCarousel;reinitCycle(1);} 
    else if ( width > 400 && width < 700 ) {destroyCarousel; reinitCycle(3);} 
    else {destroyCarousel;reinitCycle(5);}
}

function reinitCycle(visibleSlides) {
    buildCarousel(visibleSlides);
}
var reinitTimer;
$(window).resize(function() {
    clearTimeout(reinitTimer);
    reinitTimer = setTimeout(reinit_cycle, 100);
});

$(document).ready(function(){
    initCycle();    
});

HTML

<div class='main' style="max-width: 950px;margin: auto;">
    <div class="home-slideshow" style="margin-bottom: 150px;">
        <img style="width: 100%" src="http://placehold.it/950x250" alt="">
        <img style="width: 100%" src="http://placehold.it/950x250" alt="">
    </div>
    <div class="caro" >
        <img src="http://placehold.it/300x300" alt="">
        <img src="http://placehold.it/300x300" alt=""> 
        <img src="http://placehold.it/300x300" alt="">
        <img src="http://placehold.it/300x300" alt=""> 
        <img src="http://placehold.it/300x300" alt="">
        <img src="http://placehold.it/300x300" alt="">  
    </div>
</div>

2 个答案:

答案 0 :(得分:2)

出于某种原因,在第一次幻灯片转换后,当它重新创建轮播时,它将所有图像设置为不透明度为0.

在初始化轮播后添加$('.caro img').css('opacity','1');修复它,但我确信有更好的解决方案,但您可能需要深入了解插件的来源。

http://jsfiddle.net/cZTxM/2/

答案 1 :(得分:0)

您有以下一行:

var destroyCarousel = $('.caro').cycle('destroy');

...将destroyCarousel设置为该方法调用的结果(jQuery对象),而不是创建一个可以调用以执行销毁的函数。

我认为这就是你的意思:

function reinit_cycle() {
    var width = $(window).width();
    var destroyCarousel = function() { // create a function
        $('.caro').cycle('destroy');
    }

    if (width < 400) {
        destroyCarousel(); // call the function
        reinitCycle(1);
    } else if (width > 400 && width < 700) {
        destroyCarousel();
        reinitCycle(3);
    } else {
        destroyCarousel();
        reinitCycle(5);
    }
}

http://jsfiddle.net/mblase75/7eAk2/