16

Bootstrap 轮播是一种奇怪的野兽。我尝试调整 $next 以防止无限循环,但最终要么打破它,要么阻止幻灯片在到达终点时向后退。

我希望轮播只在列表中滑动而不是无限循环。

任何帮助,将不胜感激。

$next = $next.length ? $next : this.$element.find('.item')[fallback]()
if ($next.hasClass('active')) return
if ($.support.transition && this.$element.hasClass('slide')) {
    this.$element.trigger(e)
    if (e.isDefaultPrevented()) return
    $next.addClass(type)
    $next[0].offsetWidth // force reflow
    $active.addClass(direction)
    $next.addClass(direction)
    this.$element.one($.support.transition.end, function() {
        $next.removeClass([type, direction].join(' ')).addClass('active')
        $active.removeClass(['active', direction].join(' '))
        that.sliding = false
        setTimeout(function() {
            that.$element.trigger('slid')
        }, 0)
    })
} else {
    this.$element.trigger(e)
    if (e.isDefaultPrevented()) return
    $active.removeClass('active')
    $next.addClass('active')
    this.sliding = false
    this.$element.trigger('slid')
}

更新:这与“自动播放”无关,我特指手动按下左右按钮。

4

8 回答 8

24

对于轮播不无限循环(使用 Bootstrap 3.0.0),并在最后一张幻灯片停止,除非单击“下一个”箭头,以下是最好的方法:

$('.carousel').carousel({
  interval: 5000,
  wrap: false
});

wrap选项设置为false告诉轮播自动停止在幻灯片中循环。我希望这能正确回答你的问题。

于 2013-10-03T11:13:35.010 回答
14

您可以在页面中添加一些代码以在slid事件发生后隐藏适当的轮播控件:

$('#myCarousel').on('slid', '', function() {
  var $this = $(this);

  $this.children('.carousel-control').show();

  if($('.carousel-inner .item:first').hasClass('active')) {
    $this.children('.left.carousel-control').hide();
  } else if($('.carousel-inner .item:last').hasClass('active')) {
    $this.children('.right.carousel-control').hide();
  }

});

此示例假定Twitter Bootstrap 示例轮播上使用的标记。

确保在打开页面时隐藏左侧。

于 2012-07-11T21:56:24.797 回答
5

data-wrap="false"在 div 中添加属性

于 2015-03-14T19:26:36.243 回答
3

最简单的方法如下:

//intro slider
$('#carousel_fade_intro').carousel({
    interval: 2500,
    pause: "false"
})

//Stop intro slider on last item
var cnt = $('#carousel_fade_intro .item').length;
$('#carousel_fade_intro').on('slid', '', function() {
    cnt--;
    if (cnt == 1) {
        $('#carousel_fade_intro').carousel('pause');
    }
});
于 2013-05-08T23:52:57.280 回答
2

对于在同一页面上为多个轮播寻找Bootstrap 3解决方案的人,请尝试以下操作:

$(function() {
    // init carousel
    $('.carousel').carousel({
        pause: true,        // init without autoplay (optional)
        interval: false,    // do not autoplay after sliding (optional)
        wrap:false          // do not loop
    });
    // init carousels with hidden left control:
    $('.carousel').children('.left.carousel-control').hide();
});

// execute function after sliding:
$('.carousel').on('slid.bs.carousel', function () {
    // This variable contains all kinds of data and methods related to the carousel
    var carouselData = $(this).data('bs.carousel');
    // get current index of active element
    var currentIndex = carouselData.getItemIndex(carouselData.$element.find('.item.active'));

    // hide carousel controls at begin and end of slides
    $(this).children('.carousel-control').show();
    if(currentIndex == 0){
        $(this).children('.left.carousel-control').fadeOut();
    }else if(currentIndex+1 == carouselData.$items.length){
        $(this).children('.right.carousel-control').fadeOut();
    }
});

如果这不适用于您的情况,请现在告诉我。

于 2015-03-13T10:30:25.910 回答
1

如果您使用的是引导程序 3,请使用此

$('.carousel').carousel({
  wrap: false
});
于 2014-10-26T10:51:26.203 回答
1

不确定这是否仅与最新版本的 Bootstrap 有关,但在最外面的轮播容器上设置 data-wrap="false" 将阻止它继续通过最后一张幻灯片。

来源: http: //getbootstrap.com/javascript/#carousel-options

于 2015-01-30T14:25:13.427 回答
0

此处发布的代码有两个问题:如果您在同一页面上有多个轮播,则无法使用;如果您单击指示点,则无法使用。此外,在Bootstrap 3中,该事件已更改名称。

以下代码是此代码的更新版本。在这里你可以找到更详细的解释

checkitem = function() {
  var $this;
  $this = $("#slideshow");
  if ($("#slideshow .carousel-inner .item:first").hasClass("active")) {
    $this.children(".left").hide();
    $this.children(".right").show();
  } else if ($("#slideshow .carousel-inner .item:last").hasClass("active")) {
    $this.children(".right").hide();
    $this.children(".left").show();
  } else {
    $this.children(".carousel-control").show();
  }
};

checkitem();

$("#slideshow").on("slid.bs.carousel", "", checkitem);
于 2014-06-05T09:05:45.007 回答