Owl Carousel 2 - autoHeight (multiple items)

后端 未结 4 1983
粉色の甜心
粉色の甜心 2021-01-13 09:25

At the moment the Owl Carousel autoHeight works only with 1 item on screen. Their plan is to calculate all visible items and change height according to highest item.

<
相关标签:
4条回答
  • 2021-01-13 09:50

    I used flex to solve this issue:

     .owl-stage {
        display: -webkit-flex;
        display: -ms-flexbox;
        display: flex;
    
        -webkit-flex-wrap: wrap;
        -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    }
    

    above code for owl-stage and below for owl-item class:

    .owl-item{
        display: -webkit-flex;
        display: -ms-flexbox;
        display: flex;
        height: auto !important;
    }
    

    I hope this reply help every body that have this issue.

    0 讨论(0)
  • 2021-01-13 10:04

    I had same issue. I only resolved adding a autoWidth:true, and it works now!

    My owl script is:

     $('.owl-carousel').owlCarousel({
      loop: false,
      margin: 10,
      items: 1,
      autoHeight: true,
      autoWidth: true,
      nav: true,
      navText: [
        "<i class='fa fa-caret-left'></i>",
        "<i class='fa fa-caret-right'></i>"
      ],
      autoplay: true,
      autoplayHoverPause: true,
      responsive: {
        0: {
          items: 1
        },
        600: {
          items: 3
        },
        1000: {
          items: 5
        }
      }
    })
    
    0 讨论(0)
  • 2021-01-13 10:06

    I solved it via the internal API using several events calling the same autoHeight-function.

    Fiddle

    The jQuery-Part:

    $('.owl-carousel').owlCarousel({
        loop: true,
        items: 3,
        margin: 1,
        autoHeight: true,
        onInitialized: setOwlStageHeight,
        onResized: setOwlStageHeight,
        onTranslated: setOwlStageHeight
    });
    function setOwlStageHeight(event) {
        var maxHeight = 0;
        $('.owl-item.active').each(function () { // LOOP THROUGH ACTIVE ITEMS
            var thisHeight = parseInt( $(this).height() );
            maxHeight=(maxHeight>=thisHeight?maxHeight:thisHeight);
        });
        $('.owl-carousel').css('height', maxHeight );
        $('.owl-stage-outer').css('height', maxHeight ); // CORRECT DRAG-AREA SO BUTTONS ARE CLICKABLE
    }
    

    For enabling the height-animation I added the following CSS:

    .owl-carousel,
    .owl-stage-outer { transition: height 500ms ease-in-out 0s; }
    

    Hope it helps.

    0 讨论(0)
  • 2021-01-13 10:08

    I'm not sure if anyone is still looking for solutions for this problem in 2020, but after trying a lot of things that didn't work, I found a very simple one. It's all about setting no height to the item that's not active.

    Like so:

    .owl-item {height: 0;}    
    .owl-item.active {height: auto;}
    

    It's elegant and no javascript is needed. You can even play with transitions to set some cool animations.

    I hope I have helped someone here.

    PS: To use this method, keep autoHeight: false ... otherwise the carousel height will be set to 0 by the library

    0 讨论(0)
提交回复
热议问题