Стоп щебетать Бутстрап Карусель в конце слайдов
Карусель Bootstrap - странный зверь. Я попробовал настройку $рядом с тем, чтобы предотвратить бесконечный цикл, но в конечном итоге либо сломал его, либо не позволил слайдам вернуться назад, когда достигли конца.
Я хотел бы, чтобы карусель только скользнул по списку, а не бесконечно.
Любая помощь будет оценена.
$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')
}
Обновление: это не связано с "автовоспроизведением". Я специально ссылаюсь на ручное нажатие левой и правой кнопок.
Ответы
Ответ 1
Вы можете просто добавить код на страницу, чтобы скрыть соответствующие элементы управления карусели после события 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.
При открытии страницы обязательно скройте левую сторону.
Ответ 2
Для карусели не бесконечно петля (используя Bootstrap 3.0.0) и остановитесь на последнем слайде, если не нажимается стрелка "следующая", это лучший способ сделать это:
$('.carousel').carousel({
interval: 5000,
wrap: false
});
Установка опции wrap
на false
означает, что карусель автоматически останавливает циклическое перемещение по слайдам. Надеюсь, это правильно ответит на ваш вопрос.
Ответ 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');
}
});
Ответ 4
Добавить атрибут data-wrap="false"
в Div
Ответ 5
если вы используете bootstrap 3, используйте этот
$('.carousel').carousel({
wrap: false
});
Ответ 6
Не уверен, что это относится только к самой новой версии Bootstrap, но установка data-wrap = "false" в самом удаленном контейнере карусели предотвратит ее прохождение мимо финального слайда.
источник: http://getbootstrap.com/javascript/#carousel-options
Ответ 7
Для людей, которые ищут решение для 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();
}
});
Пожалуйста, позвольте мне сейчас, если это не работает в вашем случае.
Ответ 8
В приведенных здесь кодах есть две проблемы: не работает, если на одной странице есть несколько каруселей и не работает, если вы нажимаете на индикаторные точки. Кроме того, в 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);