如果只有一个图像,则停止循环播放幻灯片 + 加载幻灯片时停止第一张图像的淡入淡出

Stop slideshow from cycling if only has one image + stop fade of first image when slideshow loads

我有一个几乎可以完美满足我需求的幻灯片。我只需要改变几件事:

  1. 如果只有一张图片,幻灯片不应淡入淡出。
  2. 幻灯片不应在页面加载时淡入。

谢谢!

我这里有代码:

$(window).load(function() { //start after HTML, images have loaded

var InfiniteRotator = {
    init: function() {
        //initial fade-in time (in milliseconds)
        var initialFadeIn = 1000;

        //interval between items (in milliseconds)
        var itemInterval = 5000;

        //cross-fade time (in milliseconds)
        var fadeTime = 2500;

        //count number of items
        var numberOfItems = $('.rotating-item').length;

        //set current item
        var currentItem = 0;

        //show first item
        $('.rotating-item').eq(currentItem).fadeIn(initialFadeIn);

        //loop through the items        
        var infiniteLoop = setInterval(function() {
            $('.rotating-item').eq(currentItem).fadeOut(fadeTime);

            if (currentItem == numberOfItems - 1) {
                currentItem = 0;
            } else {
                currentItem++;
            }
            $('.rotating-item').eq(currentItem).fadeIn(fadeTime);

        }, itemInterval);
    }
};

InfiniteRotator.init();

});

Html代码:

<div id="rotating-item-wrapper">
<img src="images/slider/1.jpg" class="rotating-item" />
<img src="images/slider/2.jpg" class="rotating-item" />
<img src="images/slider/3.jpg" class="rotating-item" />
</div>

如果只有一张图片,幻灯片不应淡入淡出。

您可以使用

获取img的数量
if($('.rotating-item-wrapper .rotating-item').length > 1){
  // run slider
}else{
  // just one image don't slide
}

幻灯片不应在页面加载时淡入。

您已经使用过

$(window).load();

为了让你的代码更容易控制..使用 infiniteLoop 作为函数

 var infiniteLoop = function() {
            $('.rotating-item').eq(currentItem).fadeOut(fadeTime);

            if (currentItem == numberOfItems - 1) {
                currentItem = 0;
            } else {
                currentItem++;
            }
            $('.rotating-item').eq(currentItem).fadeIn(fadeTime);

        });

然后设置间隔

if($('.rotating-item-wrapper .rotating-item').length > 1){
      // run slider
      setInterval(infiniteLoop , itemInterval);
    }else{
      // just one image don't slide
    }

完整代码如下所示

 $(document).ready(function() { //start after HTML, images have loaded
    var InfiniteRotator = {
        init: function() {
            //initial fade-in time (in milliseconds)
            var initialFadeIn = 1000;

            //interval between items (in milliseconds)
            var itemInterval = 5000;

            //cross-fade time (in milliseconds)
            var fadeTime = 2500;

            //count number of items
            var numberOfItems = $('.rotating-item').length;

            //set current item
            var currentItem = 0;

            //show first item
            $('.rotating-item').eq(currentItem).fadeIn(initialFadeIn);
            if(numberOfItems > 1){
                //loop through the items        
                var infiniteLoop = setInterval(function() {
                    $('.rotating-item').eq(currentItem).fadeOut(fadeTime);

                    if (currentItem == numberOfItems - 1) {
                        currentItem = 0;
                    } else {
                        currentItem++;
                    }
                    $('.rotating-item').eq(currentItem).fadeIn(fadeTime);

                }, itemInterval);
            }
        }
    }

      InfiniteRotator.init();

    });

JSFIDDLE

我认为它必须是这样的:

var InfiniteRotator = {
init: function() {
    //initial fade-in time (in milliseconds)
    var initialFadeIn = 1000;

    //interval between items (in milliseconds)
    var itemInterval = 5000;

    //cross-fade time (in milliseconds)
    var fadeTime = 2500;

    //count number of items
    var numberOfItems = $('.rotating-item').length;

    //set current item
    var currentItem = 0;

    //show first item

// We want the first slide without fade

    $('.rotating-item').eq(currentItem).fadeIn(0);

    //loop through the items        

//dont slide if there's no more than 1 item
if(numberOfItems < 1){
        var infiniteLoop = setInterval(function() {
            $('.rotating-item').eq(currentItem).fadeOut(fadeTime);

            if (currentItem == numberOfItems - 1) {
                currentItem = 0;
            } else {
                currentItem++;
            }
            $('.rotating-item').eq(currentItem).fadeIn(fadeTime);



           }, itemInterval);
}
        }
    }