【问题标题】:Fixing a Bootstrap 4 multiple item carousel on XL screen在 XL 屏幕上修复 Bootstrap 4 多项目轮播
【发布时间】:2020-07-31 13:39:46
【问题描述】:

(这绝对不是重复的)。

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

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

除了 xl 媒体查询外,它运行良好。我一直试图解决这个问题几个小时没有成功:

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

sm 屏幕 675 像素。这很好用。

md 屏幕 768 像素。这很好用。

lg 屏幕 992pxx。这很好用。

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

  1. 如果您按 Prev,然后按 Next,则从轮播右侧进入的新项目会有一个小的但无法识别的延迟。

第一个错误必须修复,但最好也修复第二个。

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

https://jsitor.com/SQENGSYDz

感谢您的帮助!

【问题讨论】:

  • 我觉得你一定要用@Zim carousel stackoverflow.com/a/20008623/8798220
  • 谢谢,但现在不能更改轮播插件。
  • 插件是什么意思?
  • 我以为是插件,刚查了一下。问题是在另一个线程中发布的解决方案不包括根据屏幕大小更改项目计数的要求。此解决方案涵盖了这一点,但可以找到错误的 XL 屏幕尺寸除外。

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


【解决方案1】:

这是您的解决方案,基于 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>

【讨论】:

  • 点赞评论!!我试图解决你的问题,但没有得到你的回应?为什么?
  • 嗨@Nisharg 我赞成你的答案,因为它有效,但我不能将其标记为解决方案,因为必须通过修改现有的 css 直接在实时示例代码上进行修复。我添加了 50 分的赏金。
  • 我结束了使用这个解决方案,它在所有情况下都比另一个更好。赏金已奖励到您的帐户。谢谢!
【解决方案2】:

希望你喜欢我的第二个回答。

说明

屏幕宽度为 1200 像素或更大 (xl),轮播仅显示 4 或 5 个项目,而不是 6 个,因此在项目循环时会导致奇怪的闪烁行为。

每个第 4 个元素无法获得 transition 的 CSS,所以我在 @media query (min-width: 1200px) 中添加了它的 CSS,现在它显示 6 个项目。

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

因为您在代码中添加了var items_per_slide = Math.round(total_items / 2);,并且始终total_items 为7,所以它会给您4 答案,因此这只适用于一行中的4 个项目。

所以我在你的代码中静态添加了6,你的问题就解决了。

如果您按 Prev,然后按 Next,则从轮播右侧进入的新项目会有一个小的但无法识别的延迟。

这是因为您的代码中有 hard-coded 33.333333333333333% 和 -16.666666666666667%,这会造成一些延迟。

https://codepen.io/nisharg/pen/YzyGvQN?editors=0111

【讨论】:

  • 嗨!这个解决方案几乎可以工作,除非在 6 个项目可见(1200 像素或更多)时按下上一个按钮。如果我按上一个,最后一个项目会在视觉上转移到左侧,而不是实现所需的轮播效果。我尝试在您的代码中找到问题但没有成功。如果你解决了这个问题,赏金绝对是你的!
  • 我试过了,但我无法修复它,让我再试一次,希望它会修复
猜你喜欢
  • 2018-09-25
  • 2019-01-21
  • 1970-01-01
  • 2018-09-19
  • 2017-03-16
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多