无法使此图像滑块在多个实例

时间:2015-07-24 13:34:54

标签: javascript jquery image

我有这个简单的图像滑块,它的功能如下:

function slider(pocket, time){      
$(pocket).find('> div:first').addClass('sn');
var nos = $(pocket).find('> div').length;
var timer = null;
    function fadeNext() {
    var currentSlide = $(pocket).find('> div.sn');
    var nextSlide = $(currentSlide).next('div');
    if(nextSlide.length == 0){
        nextSlide = $(pocket).find('> div:first');
    }
        $(currentSlide).removeClass('sn').fadeOut(time);
        $(nextSlide).addClass('sn').fadeIn(time);
    }
    function fadePrev() {
    var currSlide = $(pocket).find('> div.sn');
    var prevSlide = $(currSlide).prev('div');
    if(prevSlide.length == 0){
        prevSlide = $(pocket).find('> div:last');
    }
        $(currSlide).removeClass('sn').fadeOut(time);
        $(prevSlide).addClass('sn').fadeIn(time);
    }
$(pocket).find('.sl_next').on('click',  function() {
    fadeNext();
});
$(pocket).find('.sl_prev').on('click',  function() {
    fadePrev();
});

function startSlide(){
    timer = setInterval(fadeNext, 3999);
}

if(time > 0 && nos > 1){
    startSlide();
}   
}

然后我调用这样的函数:

slider('.manual', 0);
slider('.auto', 500);

..这就是问题所在;我有多组图像,类“.manual”的图像有'previous'和'next'按钮。具有“auto”类的那些是在图像之间自动旋转。

我在每组中都有不同数量的图像,例如我在3组中有2个,3个,5个图像,类别为“.auto”。滑块在开始时效果很好,然后具有2和3个图像的设置将是空白的(所有图像将保持'显示:无'),直到具有5个图像的设置到达最后一个图像,而不是在返回到第一个图像之后他们达到了各自的最后形象。

所以最后只有具有最大图像和手动设置的设置看起来正常,我想我需要帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

问题是您在$(pocket)fadeNext()方法中使用fadePrev()。如果$(pocket)只选择了一个元素,那么效果很好但是如果有多个,则会出错,因为你在计算所有口袋里的所有div

一种可能的解决方案:在fadeNext()fadePrev()方法中,遍历每个"口袋"单独使用each()函数(您需要更新其中所有对口袋的引用,并将其替换为this)。这样,你只计算特定口袋里面的div,而不是计算所有口袋中的所有div

这样的事情:

function slider(pocket, time){      
    $(pocket).find('> div:first').addClass('sn');
    var nos = $(pocket).find('> div').length;
    var timer = null;
    function fadeNext() {
        $(pocket).each(function() {
            var currentSlide = $(this).find('> div.sn');
            var nextSlide = $(currentSlide).next('div');
            if(nextSlide.length == 0){
                nextSlide = $(this).find('> div:first');
            }
            $(currentSlide).removeClass('sn').fadeOut(time);
            $(nextSlide).addClass('sn').fadeIn(time);
        });
    }
    function fadePrev() {
        $(pocket).each(function() {
            var currSlide = $(this).find('> div.sn');
            var prevSlide = $(currSlide).prev('div');
            if(prevSlide.length == 0){
                prevSlide = $(this).find('> div:last');
            }
            $(currSlide).removeClass('sn').fadeOut(time);
            $(prevSlide).addClass('sn').fadeIn(time);
        });
    }
    $(pocket).find('.sl_next').on('click',  function() {
        fadeNext();
    });
    $(pocket).find('.sl_prev').on('click',  function() {
        fadePrev();
    });

    function startSlide(){
        timer = setInterval(fadeNext, 3999);
    }

    if(time > 0 && nos > 1){
        startSlide();
    }   
}

slider('.manual', 0);
slider('.auto', 500);

您可以在此JSFiddle上看到一个有效的演示:http://jsfiddle.net/3n0d54t3/1/