Armo
Новичок
Подскажите пожалуйста пытаюсь сверстать макет PSD в Bootstrap 3, и там несколько слайдеров. Вот пытаюсь их реализовать на плагине carousel. И как всегда есть одно но. Слайдер должен быть адаптивным для мобильных устройств. И тут начинается самое интересное.
В мануале написана вот такая структура:
У меня пл дизайну несколько блоков .item в которых соответственно располагаются блоки.
И собственно в зависимости от ширины окна количество элементов должно меняться что бы блоки не наезжали друг на друга.
Я написал jQ мини плагинчик для адаптации HTML структуры под ширину экрана:
При событии load или redy плагин успешно выполняет свои задачи. Но стоит мне его привязать на событие ресайза окна:
Как начинаются лаги. На мобильном страница вообще не подгружается а на PC при ресайзе окна браузера появляется не понятный scroll который зависает и браузер уходит в себя. В чём причина помогите пожалуйста ребят. Мозги в клочья с Bootstrap 3 да и вообще с bootstrap столкнулся в первый раз.
В мануале написана вот такая структура:
Код:
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
<!-- Wrapper for slides -->
<div class="carousel-inner">
<div class="item active">
Содержимое
</div>
</div>
<a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"></a>
<a class="right carousel-control" href="#carousel-example-generic" data-slide="next"></a>
</div>
И собственно в зависимости от ширины окна количество элементов должно меняться что бы блоки не наезжали друг на друга.
Я написал jQ мини плагинчик для адаптации HTML структуры под ширину экрана:
Код:
$(function () {
$.fn.slideradapt = function (options) {
options = $.extend({
width: 300, // минимальная ширина
}, options);
this.each(function () {
$(this).off('slideradapt');
var $this = $(this);
var $inner = $this.find('.carousel-inner');
var $items = $this.find('.items > div');
var width = options.width, ecount = $items.size(), initemcount = Math.floor($inner.width() / width),
itemscount = Math.ceil(ecount / initemcount), ewidth = $inner.width() / initemcount,
div = '', i = 1, group = 1;
// Группировка объектов для помещения в Item
$items.each(function () {
$(this).addClass('group' + group);
i++;
if (i > initemcount) {
i = 1;
group++;
}
});
for (i = 1; i <= itemscount; i++) {
var active = (i === 1) ? ' active' : '';
div += '<div class="item' + active + '">';
$items.each(function () {
if ($(this).hasClass('group' + i)) {
div += '<div';
div += $(this).attr('id') ? ' id="' + $(this).attr('id') + '"' : '';
div += $(this).attr('class') ? ' class="' + $(this).attr('class') + '"' : '';
div += '>' + $(this).html() + '</div>';
}
});
div += '</div>';
}
$inner.find('.item').remove(); // reset
$inner.html(div).remove('.item:empty');
delete(div);
$inner.find('.item > div').width(ewidth);
$('.carousel-control[href="#' + $this.attr('id') + '"]').removeClass('off').removeClass('_off');
$('.carousel-control.left[href="#' + $this.attr('id') + '"]').addClass('off');
itemscount === 1 && $('.carousel-control[href="#' + $this.attr('id') + '"]').addClass('_off');
$this.off('slid.bs.carousel').on('slid.bs.carousel', function () {
var i = $(this).find('.active').index();
if (!i) {
$('.carousel-control.right[href="#' + $this.attr('id') + '"]').removeClass('off');
$('.carousel-control.left[href="#' + $this.attr('id') + '"]').addClass('off');
}
else if (i == $(this).find('.item').size() - 1) {
$('.carousel-control.left[href="#' + $this.attr('id') + '"]').removeClass('off');
$('.carousel-control.right[href="#' + $this.attr('id') + '"]').addClass('off');
}
else {
$('.carousel-control[href="#' + $this.attr('id') + '"]').removeClass('off');
}
});
delete($this, $inner, $items);
return $(this);
});
};
})
Код:
$(function () {
$(window).bind('load resize', function(){
$('#partners_carousel').slideradapt({width: 200}).carousel();
});
});