3

可能重复:
我的轮播不起作用

我有点疑惑!我正在创建这个旋转木马,我希望它循环播放。其他一切都很好,但是,当最后一张图像滑出时,我希望第一个在它之后做同样的事情,然后第二个......无限。我尝试了很多事情,比如将第一张图片附加到最后一张。我还尝试在最后一张之后显示图像(这个尝试但效果不佳)。

我需要展示我需要做哪些调整。非常感谢!

var images = $("#slideShow div");
var index = 0;
for (i = 0; i < images.length; i++) {
    $(images[i]).addClass("image-" + i);
}

setInterval(function() {
    $(".image-" + (index)).slideUp(1000);
    if (index < images.length - 1) {
        index += 1;
    }   
    else {
        index = 0;
    }    
}, 500);


  #slideShow {
height:20em;
width:80%;
float:right;

}

#slideShow div{
line-height:20em;
float:right;
}   

   #slideShow img{
vertical-align:middle;
border:solid 5px #A5A5A5;
border-radius:5px;
-moz-border-radius:5px;
-webkit-border-radius:5px;
}

        <div id="slideShow">
                    <?php

                            $dir = "carousel";
                        $dh = opendir($dir);
                        while($slide = readdir($dh)){
                                $items[] = $slide;
                            }

                            for($i=0; $i<sizeof($items); $i++){
                                                            if($items[$i] !=   "." && $items[$i] != ".."){
                                                   $imagePath = $dir."/".$items[$i];
                                                   $image = "<div>"."<img src = \"".$imagePath."\""." />"."</div>";
                                                    echo $image;

                                        }

                                }
                            closedir($dh);

                        ?>

            </div>
4

2 回答 2

4

而不是切换你的图像,这将使代码不可读和充满 z-index 变化,只是容器元素animatescrollTop

  • 为 scrollTop 设置动画并在回调内部,重做循环函数并:
  • 将 scrollTop 重置为 0 和
  • 删除第一个元素,将其附加after到最后一个

var $slideShow = $('#slideshow');

function loop() {
  $slideShow.stop().animate({
    scrollTop: 200
  }, 800, 'linear', function() {
    $(this).scrollTop(0).find('div:last').after($('div:first', this));
    loop(); // Recursion
  });
}

loop(); // Start
#slideshow {
  width: 200px;
  height: 200px;
  position: relative;
  overflow: hidden;
}

#slideshow img {
  display: block;
}
<div id="slideshow">
  <div><img src="http://placehold.it/200x200/cf5&text=1" alt=""></div>
  <div><img src="http://placehold.it/200x200/f0f&text=2" alt=""></div>
  <div><img src="http://placehold.it/200x200/444&text=3" alt=""></div>
  <div><img src="http://placehold.it/200x200/f70&text=4" alt=""></div>
</div>

<script src="https://code.jquery.com/jquery-3.1.0.js"></script>

于 2012-11-27T15:42:26.837 回答
0

您需要做的是制作图像的第二个副本,将它们粘贴在现有图像的末尾。这样,当您传递“最后一个”图像时,“第一个”图像是可见的。

诀窍是一旦复制的“第一个”图像到达可视区域的末尾,就重置整个批次的位置。

于 2012-11-27T15:07:39.800 回答