【问题标题】:loop carousel jquery [duplicate]循环轮播jquery [重复]
【发布时间】:2012-11-15 05:32:27
【问题描述】:

可能重复:
my carousel does not work

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

需要向我展示我需要进行哪些调整。非常感谢!

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>

【问题讨论】:

  • 啊,没有停顿?顺便说一句,您的幻灯片动画比 setInterval 滴答声慢。对我来说毫无意义。一个演示小提琴将不胜感激
  • 是的!没有停顿!是的,我是出于发展目的故意这样做的;因为我有一个 php 脚本正在从文件夹中读取的图像池。有什么帮助吗?
  • 我有个主意,让我做一个演示好吗? :)

标签: jquery loops carousel infinite


【解决方案1】:

不要切换您的图像,这会使代码不可读且充满 z-index 更改,只需 animate 容器元素的 scrollTop

  • 为 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>

【讨论】:

  • 你有一个演示。如果你想看看发生了什么,只需删除 overflow:hidden;
  • @Wagaba...好吧?任何新闻?你还在努力吗?
  • 等一下...我应该取消所有代码,还是?如果没有,我应该把这段代码放在哪里,或者它应该放在什么后面?
  • 您可以清楚地看到,在我的演示中,您的代码没有“逗号”。兄弟哪里出了问题?
  • 哈哈哈!哈哈!好吧,让我来做。
【解决方案2】:

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

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

【讨论】:

  • 我想明白你的意思,但看起来我已经用 append() 试过了。这反而扭曲了我的照片,没有任何测试版。可以参考我简单的几行代码演示一下吗?
  • 好吧!根据您的请求。这会生成 html:
  • //此处继续 $image = "
    ".""."
    ";回声$图像; } } 关闭($dh); ?>
  • css:#slideShow { height:20em;宽度:80%;浮动:对;溢出:隐藏; } #slideShow div{ 行高:20em;浮动:对; } #slideShow img{ 垂直对齐:中间;边框:实心 5px #A5A5A5;边框半径:5px; -moz-边界半径:5px; -webkit-border-radius:5px; }
  • 你真的应该编辑问题并将代码示例放在那里。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签