【问题标题】:Center OwlCarousel when less than X items少于 X 个项目时居中 OwlCarousel
【发布时间】:2015-06-23 12:11:11
【问题描述】:

我们在响应式网站上使用 OwlCarousel 1.3.3。我们已将最大项目数设置为 4。

$container.owlCarousel({
    items: 4,
    itemsDesktop: [1000, 4], 
    itemsDesktopSmall: [900, 3], 
    itemsTablet: [600, 2], 
    itemsMobile: [480, 1]
});

只要轮播包含 4 张或更多图片,一切正常。但是当编辑器只添加 3 个或更少的项目时,我们希望这些项目在页面上居中。现在它们“左对齐”,看起来不太好。

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 试图得到一些澄清。

【问题讨论】:

  • 您能否提供一个最小的在线示例,以便我们可以看到实际的问题?
  • 我添加了一个codepen

标签: javascript css carousel owl-carousel


【解决方案1】:

在新版本的猫头鹰轮播2中,你需要添加这个css:

.owl-stage{
    margin: 0 auto;
}

此作品在第 2 版中适合我。

问候!

【讨论】:

  • 要与 OwlCarousel 2 一起使用,必须将选项“center”设置为“false”。
【解决方案2】:

OwlCarousel 在.owl-wrapper 元素宽度上有一个 2 倍的乘数。这个乘数使得旋转木马在未满时难以居中。

但是,这个乘数似乎没有任何理由存在。当我删除它时,似乎什么都没有。所以这就是我所做的,更新后的 owl.carousel.js 可以在这里找到:https://github.com/Vinnovera/OwlCarousel/tree/remove-width-multiplier

我添加了这个 CSS(不包含在 repo 中):

.owl-wrapper {
    margin: 0 auto;
}

【讨论】:

    【解决方案3】:

    您可以使用 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');
                                });
                            }
                        });
    

    【讨论】:

    • 救世主 :) ...这是很棒的作品
    • 适用于版本 1.3.3
    【解决方案4】:

    改变这个:

    .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;
    }
    

    【讨论】:

      【解决方案5】:

      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);
      });
      

      【讨论】:

        【解决方案6】:

        这也是一个可能的解决方案,它对我使用 flexbox 有效。

        .owl-stage {
            display: -webkit-box;
            display: -ms-flexbox;
            display: flex;
            -webkit-box-pack: center;
            -ms-flex-pack: center;
                justify-content: center;
        }
        

        【讨论】:

          【解决方案7】:

          这项工作适用于 Owl Carousel 2.3.4

          .owl-carousel .owl-stage {
              margin: 0 auto;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-27
            • 1970-01-01
            • 1970-01-01
            • 2023-01-04
            • 1970-01-01
            相关资源
            最近更新 更多