当少于 X 个项目时居中 OwlCarousel
Center OwlCarousel when less than X items
我们在响应式网站上使用 OwlCarousel 1.3.3。我们已将最大项目数设置为 4。
$container.owlCarousel({
items: 4,
itemsDesktop: [1000, 4],
itemsDesktopSmall: [900, 3],
itemsTablet: [600, 2],
itemsMobile: [480, 1]
});
只要轮播包含 4 张或更多图片,一切正常。但是当编辑器只添加 3 个或更少的项目时,我们希望这些项目在页面上居中。现在他们是 "left aligned",看起来不太好。
选项 itemsScaleUp
不是我要找的。如果项目设置为 4,但轮播仅包含 1 个项目,则该项目会变得太大。
我在 github 上发现了这些问题:
https://github.com/smashingboxes/OwlCarousel2/issues/35
https://github.com/OwlFonk/OwlCarousel/issues/417
但我觉得没有任何帮助。
您可以在此 codepen 中查看问题。
更新:
查看 OwlCarousel 的源代码,您会看到 .owl-wrapper
元素宽度乘以 2。但我不明白为什么,如果删除乘数是否安全。
我打开这个 github issue 试图得到一些澄清。
OwlCarousel 在 .owl-wrapper
元素宽度上有 2 倍乘数。当轮播未满时,这个乘数使得轮播很难居中。
然而,这个乘数似乎没有任何理由在那里。当我移除它时,似乎没有任何东西损坏。这就是我所做的,更新后的 owl.carousel.js 可以在这里找到:https://github.com/Vinnovera/OwlCarousel/tree/remove-width-multiplier
我添加了这个 CSS(不包含在回购中):
.owl-wrapper {
margin: 0 auto;
}
改变这个:
.owl-carousel .owl-item {
position: relative;
min-height: 1px;
display:inline-block;
-webkit-backface-visibility: hidden;
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none; }
还有这个
.owl-carousel {
display: none;
width: 100%;
text-align:center;
}
您可以使用 afterInit 和 ufterUpdate 方法代替更改源。像这样:
var owl = $('#carousel');
owl.owlCarousel({
items 6,
afterInit: function () {
owl.find('.owl-wrapper').each(function () {
var w = $(this).width() / 2;
$(this).width(w);
$(this).css('margin', '0 auto');
});
},
afterUpdate: function () {
owl.find('.owl-wrapper').each(function () {
var w = $(this).width() / 2;
$(this).width(w);
$(this).css('margin', '0 auto');
});
}
});
在新版本的Owl轮播2中,需要添加这个css:
.owl-stage{
margin: 0 auto;
}
此作品在版本 2 中适合我。
此致!
Owlcarousel2 的解决方案
var owl = $('.owl-carousel');
owl.owlCarousel();
$(window).on('resize load', function() {
var outerStage = owl.find('.owl-stage-outer');
var outerWidth = Number(outerStage.css('width').replace('px', ''));
var width = Number(owl.find('.owl-stage').css('width').replace('px', ''));
if (width < outerWidth)
outerStage.css('left', Math.ceil(outerWidth - width)/2 + 'px');
else
outerStage.css('left',0);
});
这也是一个可能的解决方案,它对我使用 flexbox 很有效。
.owl-stage {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
这对我来说适用于 Owl Carousel 2.3.4
.owl-carousel .owl-stage {
margin: 0 auto;
}
我们在响应式网站上使用 OwlCarousel 1.3.3。我们已将最大项目数设置为 4。
$container.owlCarousel({
items: 4,
itemsDesktop: [1000, 4],
itemsDesktopSmall: [900, 3],
itemsTablet: [600, 2],
itemsMobile: [480, 1]
});
只要轮播包含 4 张或更多图片,一切正常。但是当编辑器只添加 3 个或更少的项目时,我们希望这些项目在页面上居中。现在他们是 "left aligned",看起来不太好。
选项 itemsScaleUp
不是我要找的。如果项目设置为 4,但轮播仅包含 1 个项目,则该项目会变得太大。
我在 github 上发现了这些问题:
https://github.com/smashingboxes/OwlCarousel2/issues/35
https://github.com/OwlFonk/OwlCarousel/issues/417
但我觉得没有任何帮助。
您可以在此 codepen 中查看问题。
更新:
查看 OwlCarousel 的源代码,您会看到 .owl-wrapper
元素宽度乘以 2。但我不明白为什么,如果删除乘数是否安全。
我打开这个 github issue 试图得到一些澄清。
OwlCarousel 在 .owl-wrapper
元素宽度上有 2 倍乘数。当轮播未满时,这个乘数使得轮播很难居中。
然而,这个乘数似乎没有任何理由在那里。当我移除它时,似乎没有任何东西损坏。这就是我所做的,更新后的 owl.carousel.js 可以在这里找到:https://github.com/Vinnovera/OwlCarousel/tree/remove-width-multiplier
我添加了这个 CSS(不包含在回购中):
.owl-wrapper {
margin: 0 auto;
}
改变这个:
.owl-carousel .owl-item {
position: relative;
min-height: 1px;
display:inline-block;
-webkit-backface-visibility: hidden;
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none; }
还有这个
.owl-carousel {
display: none;
width: 100%;
text-align:center;
}
您可以使用 afterInit 和 ufterUpdate 方法代替更改源。像这样:
var owl = $('#carousel');
owl.owlCarousel({
items 6,
afterInit: function () {
owl.find('.owl-wrapper').each(function () {
var w = $(this).width() / 2;
$(this).width(w);
$(this).css('margin', '0 auto');
});
},
afterUpdate: function () {
owl.find('.owl-wrapper').each(function () {
var w = $(this).width() / 2;
$(this).width(w);
$(this).css('margin', '0 auto');
});
}
});
在新版本的Owl轮播2中,需要添加这个css:
.owl-stage{
margin: 0 auto;
}
此作品在版本 2 中适合我。
此致!
Owlcarousel2 的解决方案
var owl = $('.owl-carousel');
owl.owlCarousel();
$(window).on('resize load', function() {
var outerStage = owl.find('.owl-stage-outer');
var outerWidth = Number(outerStage.css('width').replace('px', ''));
var width = Number(owl.find('.owl-stage').css('width').replace('px', ''));
if (width < outerWidth)
outerStage.css('left', Math.ceil(outerWidth - width)/2 + 'px');
else
outerStage.css('left',0);
});
这也是一个可能的解决方案,它对我使用 flexbox 很有效。
.owl-stage {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
这对我来说适用于 Owl Carousel 2.3.4
.owl-carousel .owl-stage {
margin: 0 auto;
}