jquery - 修复 XL 屏幕上的 Bootstrap 4 多项目轮播

标签 jquery bootstrap-4 media-queries carousel bootstrap-carousel

(这绝对不是重复的)。

我实现了一个显示多个项目的 Bootstrap 4 轮播。它必须满足不同屏幕尺寸的这些特定要求:

  • 0 - md 屏幕(就在 md 开始之前):带有 2 个可见项目的轮播
  • md - lg 屏幕(就在 lg 开始之前):带有 3 个可见项目的轮播
  • lg - xl 屏幕(就在 xl 开始之前):带有 4 个可见项目的轮播
  • xl 屏幕及以上:带有 6 个可见项目的轮播

xl 媒体查询外,它的效果都很好。我已经尝试解决这个问题几个小时但没有成功:

  1. 如果屏幕宽度为 1200 像素或以上 (xl),则轮播仅显示 4 或 5 个项目,而不是 6 个,因此在循环浏览项目时会导致奇怪的闪烁行为。

sm屏幕675px。这工作得很好。

sm screen 576px

MD屏幕768px。这工作得很好。

md screen 768px

lg 屏幕 992px。这工作得很好。

lg screen 992px

xl screen 1200px 如您所见,仅显示 4 个项目(启动示例时有时显示 5 个项目)。此屏幕尺寸应显示 6 项。

xl screen 1200px

  • 如果您按上一页,然后按下一页,则从轮播右侧进入的新项目将会出现短暂但无法识别的延迟。
  • 第一个错误必须修复,但最好也修复第二个错误。

    我没有在此处粘贴代码,而是在下面的链接中添加了一个实例:

    https://jsitor.com/SQENGSYDz

    感谢您的帮助!

    最佳答案

    这是您的解决方案,基于此 https://stackoverflow.com/a/20008623/8798220

    如果您发现幻灯片出现故障,可以使用How to add gap between images in carousel slider or remove glitch when slide概念(我自己的问题)

    $('#recipeCarousel').carousel({
        interval: 250000
    })
    
    $('.carousel .carousel-item').each(function(){
        var minPerSlide = 4;
        var next = $(this).next();
        if (!next.length) {
            next = $(this).siblings(':first');
        }
        next.children(':first-child').clone().appendTo($(this));
    
        for (var i=0;i<minPerSlide;i++) {
            next=next.next();
            if (!next.length) {
                next = $(this).siblings(':first');
            }
    
            next.children(':first-child').clone().appendTo($(this));
        }
    });
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    
    <style>
    .carousel-inner .carousel-item.active,
    .carousel-inner .carousel-item-next,
    .carousel-inner .carousel-item-prev {
        display: flex;
    }
    
    .carousel-inner .carousel-item-right.active,
    .carousel-inner .carousel-item-next {
        transform: translateX(50%);
    }
    
    .carousel-inner .carousel-item-left.active, 
    .carousel-inner .carousel-item-prev {
        transform: translateX(-50%);
    }
    
    @media (min-width: 768px) and (max-width: 992px) {
        .carousel-inner .carousel-item-right.active,
        .carousel-inner .carousel-item-next {
            transform: translateX(33.33%);
        }
    
        .carousel-inner .carousel-item-left.active, 
        .carousel-inner .carousel-item-prev {
            transform: translateX(-33.33%);
        }
    }
    
    @media (min-width: 992px) and (max-width: 1200px) {
        .carousel-inner .carousel-item-right.active,
        .carousel-inner .carousel-item-next {
            transform: translateX(25%);
        }
    
        .carousel-inner .carousel-item-left.active, 
        .carousel-inner .carousel-item-prev {
            transform: translateX(-25%);
        }
    }
    
    @media (min-width: 1200px) {
        .carousel-inner .carousel-item-right.active,
        .carousel-inner .carousel-item-next {
            transform: translateX(16%);
        }
    
        .carousel-inner .carousel-item-left.active, 
        .carousel-inner .carousel-item-prev {
            transform: translateX(-16%);
        }
    }
    
    .carousel-inner .carousel-item-right,
    .carousel-inner .carousel-item-left{ 
        transform: translateX(0);
    }
    </style>
    
    <div class="container text-center my-3">
      <h2 class="font-weight-light">Bootstrap 4 - Multi Item Carousel</h2>
      <div class="row mx-auto my-auto">
          <div id="recipeCarousel" class="carousel slide w-100" data-ride="carousel">
              <div class="carousel-inner w-100" role="listbox">
                  <div class="carousel-item active">
                      <img class="img-fluid col-6 col-md-4 col-lg-3 col-xl-2" src="http://placehold.it/380?text=1">
                  </div>
                  <div class="carousel-item">
                      <img class="img-fluid col-6 col-md-4 col-lg-3 col-xl-2" src="http://placehold.it/380?text=2">
                  </div>
                  <div class="carousel-item">
                      <img class="img-fluid col-6 col-md-4 col-lg-3 col-xl-2" src="http://placehold.it/380?text=3">
                  </div>
                  <div class="carousel-item">
                      <img class="img-fluid col-6 col-md-4 col-lg-3 col-xl-2" src="http://placehold.it/380?text=4">
                  </div>
                  <div class="carousel-item">
                      <img class="img-fluid col-6 col-md-4 col-lg-3 col-xl-2" src="http://placehold.it/380?text=5">
                  </div>
                  <div class="carousel-item">
                      <img class="img-fluid col-6 col-md-4 col-lg-3 col-xl-2" src="http://placehold.it/380?text=6">
                  </div>
              </div>
              <a class="carousel-control-prev w-auto" href="#recipeCarousel" role="button" data-slide="prev">
                  <span class="carousel-control-prev-icon bg-dark border border-dark rounded-circle" aria-hidden="true"></span>
                  <span class="sr-only">Previous</span>
              </a>
              <a class="carousel-control-next w-auto" href="#recipeCarousel" role="button" data-slide="next">
                  <span class="carousel-control-next-icon bg-dark border border-dark rounded-circle" aria-hidden="true"></span>
                  <span class="sr-only">Next</span>
              </a>
          </div>
      </div>
      <h5 class="mt-2">Advances one slide at a time</h5>
    </div>
    
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>

    关于jquery - 修复 XL 屏幕上的 Bootstrap 4 多项目轮播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61282035/

    相关文章:

    java - JQuery:日期选择器突出显示日期范围

    jquery - 将元素滑入容器

    jquery - 使用 Encore 和 Symfony 4 的 Bootstrap 日期选择器

    html - Bootstrap 4 使用 Bootstrap 根据设备大小对元素的位置应用响应

    jquery使日期选择器始终保持打开状态

    javascript - Ajax 加载后 Tumblr 之类的按钮不起作用

    javascript - 如果在下拉菜单内发生单击,则阻止下拉菜单关闭

    css - JQuery UI DatePicker 未显示在 Bootstrap Card 中

    html - MobileMedia 查询宽度问题

    media-queries - 用于可滚动 ionic 内容的 Ionic4 打印媒体查询