动画引导程序 4 轮播中的上一张和下一张幻灯片

时间:2021-05-08 13:11:32

标签: javascript html jquery css bootstrap-4

我正在使用 bootstrap 4 carousel 并且我已经为项目定制了它。

我的基本要求是

    • 当我单击下一张幻灯片时,当前的下一张幻灯片将变为活动状态,并加载新的下一张幻灯片,该幻灯片应该具有动画效果,就像它来自右侧视口之外一样。
    • 当前活动幻灯片将变为上一个,因此以前可用的幻灯片应该像离开视口左侧一样具有动画效果。
  1. 与之前的点击相同。

快速概览:

  • 下一张幻灯片应该从视口的右侧进出
  • 上一张幻灯片应从视口左侧进出
<块引用>

左边的幻灯片是:上一个 中间幻灯片是:活动 右边的幻灯片是:下一个

这是我的轮播代码片段: 我使用过 Jquery 3.5.1 和 Bootstrap 4.6

$moreAboutSlideCount = $('.carousel-card').length;
if ($moreAboutSlideCount > 2) {
    $('#more-about-carousel .carousel-inner').children().removeClass('prev active next');
    if ($moreAboutSlideCount % 2 == 0) {
        $('.carousel-card:nth-child(' + ($moreAboutSlideCount / 2) + ')').addClass('active');
        $('.carousel-card:nth-child(' + ($moreAboutSlideCount / 2) + ')').prev().addClass('prev');
        $('.carousel-card:nth-child(' + ($moreAboutSlideCount / 2) + ')').next().addClass('next');
    } else {
        $('.carousel-card:nth-child(' + (($moreAboutSlideCount + 1) / 2) + ')').addClass('active');
        $('.carousel-card:nth-child(' + (($moreAboutSlideCount + 1) / 2) + ')').prev().addClass('prev');
        $('.carousel-card:nth-child(' + (($moreAboutSlideCount + 1) / 2) + ')').next().addClass('next');
    }
    $('.carousel-card').click(function() {
        const moreAboutSlider = document.querySelector('#more-about-carousel .carousel-inner');

        if (moreAboutSlider.lastElementChild === this) {
            $(this).parent().append($(this).siblings().first());
        }
        if (moreAboutSlider.firstElementChild === this) {
            $(this).parent().prepend($(this).siblings().last());
        }

        $(this).removeClass('prev next');
        $(this).siblings().removeClass('prev active next');

        $(this).addClass('active');
        $(this).prev().addClass('prev');
        $(this).next().addClass('next');
    });
}
#more-about-carousel {
  height: 350px;
}

#more-about-carousel .carousel-inner {
  height: 96%;
  width: 92%;
  margin: 2% 4%;
  align-items: center;
  justify-content: center;
}

#more-about-carousel .carousel-card {
  height: 100%;
  width: 100%;
  position: absolute;
  z-index: 1;
  -webkit-transform: scale(0.6) translateY(-2rem);
  transform: scale(0.6) translateY(-2rem);
  opacity: 0;
  cursor: pointer;
  pointer-events: none;
  background: #2e5266;
  background: linear-gradient(to top, #2e5266, #6e8898);
  transition: 1s;
}

#more-about-carousel .carousel-card:after {
  position: absolute;
  height: 2px;
  width: 100%;
  border-radius: 100%;
  background-color: rgba(73, 73, 73, 0.3);
  bottom: -5rem;
  -webkit-filter: blur(4px);
  filter: blur(4px);
}

#more-about-carousel .carousel-card:before {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  font-size: 3rem;
  font-weight: 300;
  color: rgb(180, 56, 56);
}

#more-about-carousel .carousel-card.active {
  z-index: 3;
  left: 33.3333333%;
  top: 0;
  -webkit-transform: scale(1) translateY(0) translateX(0);
  transform: scale(1) translateY(0) translateX(0);
  opacity: 1;
  pointer-events: auto;
  transition: 1s;
  cursor: default;
  position: absolute;
}

#more-about-carousel .carousel-card.prev,
#more-about-carousel .carousel-card.next {
  z-index: 2;
  -webkit-transform: scale(0.8) translateY(-1rem) translateX(0);
  transform: scale(0.8) translateY(-1rem) translateX(0);
  opacity: 0.6;
  pointer-events: auto;
  transition: 1s;
  display: flex;
  position: absolute;
}

#more-about-carousel .carousel-card.prev {
  left: 0;
}

#more-about-carousel .carousel-card.next {
  left: 66.66666666%;
}
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
<div class="bg-light pb-5">
  <div class="m-0 p-5">
    <div class="about-carousel">
      <div id="more-about-carousel" class="carousel slide" data-ride="carousel" data-interval="60000">
        <div class="carousel-inner row">
          <div class="carousel-item col-12 col-md-4 card carousel-card text-center">
            <h5 class="card-title">One</h5>
            <h6 class="card-subtitle">1</h6>
            <div class="card-body p-0">
              <p class="card-text text-center text-monospace">Card - 1</p>
            </div>
          </div>
          <div class="carousel-item col-12 col-md-4 card carousel-card text-center">
            <h5 class="card-title">Two</h5>
            <h6 class="card-subtitle">2</h6>
            <div class="card-body p-0">
              <p class="card-text text-center text-monospace">Card - 2</p>
            </div>
          </div>
          <div class="carousel-item col-12 col-md-4 card carousel-card text-center">
            <h5 class="card-title">Three</h5>
            <h6 class="card-subtitle">3</h6>
            <div class="card-body p-0">
              <p class="card-text text-center text-monospace">Card - 3</p>
            </div>
          </div>
          <div class="carousel-item col-12 col-md-4 card carousel-card text-center">
            <h5 class="card-title">Four</h5>
            <h6 class="card-subtitle">4</h6>
            <div class="card-body p-0">
              <p class="card-text text-center text-monospace">Card - 4</p>
            </div>
          </div>
          <div class="carousel-item col-12 col-md-4 card carousel-card text-center">
            <h5 class="card-title">Five</h5>
            <h6 class="card-subtitle">5</h6>
            <div class="card-body p-0">
              <p class="card-text text-center text-monospace">Card - 5</p>
            </div>
          </div>
          <div class="carousel-item col-12 col-md-4 card carousel-card text-center">
            <h5 class="card-title">Six</h5>
            <h6 class="card-subtitle">6</h6>
            <div class="card-body p-0">
              <p class="card-text text-center text-monospace">Card - 6</p>
            </div>
          </div>
          <div class="carousel-item col-12 col-md-4 card carousel-card text-center">
            <h5 class="card-title">Seven</h5>
            <h6 class="card-subtitle">7</h6>
            <div class="card-body p-0">
              <p class="card-text text-center text-monospace">Card - 7</p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

注意:脚本错误仅在此处显示,不在我的本地计算机中。

1 个答案:

答案 0 :(得分:0)

尝试不同的东西:

但无法缩小左右元素。

$('#more-about-carousel').carousel({
  interval: 60000
});

$('.carousel-item').each(function() {
  var minPerSlide = 3;
  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));
  }
});
#more-about-carousel {
    height: 350px;
}
.carousel-inner {
  height: 96%;
  width: 92%;
  margin: 2% 4%;
}

.carousel-inner .carousel-item {
  height: 100%;
}

.carousel-inner .carousel-item .carousel-card {
  height: 100%;
  width: 100%;
  font-size: 3rem;
  font-weight: 300;
  background: #E5F5FF;
  background: linear-gradient(to top, #E5F5FF, #6e8898);
  transition: 1s;
}

.carousel-control-button {
  display: flex;
  border-radius: 50%;
  margin: 0;
  padding: 0;
  height: 40px;
  width: 40px;
  font-size: 2rem;
  line-height: 30px;
  background-color: #000;
  color: #FFF;
  justify-content: center;
  font-weight: bolder;
  position: absolute;
  z-index: 3;
}

.carousel-control-button:hover {
  background: transparent;
  color: #444;
  cursor: pointer;
  border: 1px solid #000;
}

.carousel-control-prev-button {
  top: 45%;
  left: 50px;
}

.carousel-control-next-button {
  top: 45%;
  right: 50px;
}

@media only screen and (max-width: 768px) {
  .carousel-inner .carousel-item>div {
    display: none;
  }
  .carousel-inner .carousel-item>div:first-child {
    display: block;
  }
}

.carousel-inner .carousel-item.active,
.carousel-inner .carousel-item-next,
.carousel-inner .carousel-item-prev {
  display: flex;
}


/* display 3 */

@media only screen and (min-width: 768px) {
  .carousel-inner .carousel-item-right.active,
  .carousel-inner .carousel-item-next {
    transform: translateX(33.333%);
  }
  .carousel-inner .carousel-item-left.active,
  .carousel-inner .carousel-item-prev {
    transform: translateX(-33.333%);
  }
}

.carousel-inner .carousel-item-right,
.carousel-inner .carousel-item-left {
  transform: translateX(0);
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
<div class="bg-light w-100 pb-5">
  <div class="m-0 p-5 text-center">
    <div class="row mx-auto my-auto">
      <div id="more-about-carousel" class="carousel slide w-100" data-ride="carousel">
        <div class="carousel-inner" role="listbox">
          <div class="carousel-item active">
            <div class="col-md-4">
              <div class="card carousel-card">
                <h5 class="card-title">One</h5>
                <h6 class="card-subtitle">1</h6>
                <div class="card-body p-0">
                  <p class="card-text text-center text-monospace">Card - 1</p>
                </div>
              </div>
            </div>
          </div>
          <div class="carousel-item">
            <div class="col-md-4">
              <div class="card carousel-card">
                <h5 class="card-title">Two</h5>
                <h6 class="card-subtitle">2</h6>
                <div class="card-body p-0">
                  <p class="card-text text-center text-monospace">Card - 2</p>
                </div>
              </div>
            </div>
          </div>
          <div class="carousel-item">
            <div class="col-md-4">
              <div class="card carousel-card">
                <h5 class="card-title">Three</h5>
                <h6 class="card-subtitle">3</h6>
                <div class="card-body p-0">
                  <p class="card-text text-center text-monospace">Card - 3</p>
                </div>
              </div>
            </div>
          </div>
          <div class="carousel-item">
            <div class="col-md-4">
              <div class="card carousel-card">
                <h5 class="card-title">Four</h5>
                <h6 class="card-subtitle">4</h6>
                <div class="card-body p-0">
                  <p class="card-text text-center text-monospace">Card - 4</p>
                </div>
              </div>
            </div>
          </div>
          <div class="carousel-item">
            <div class="col-md-4">
              <div class="card carousel-card">
                <h5 class="card-title">Five</h5>
                <h6 class="card-subtitle">5</h6>
                <div class="card-body p-0">
                  <p class="card-text text-center text-monospace">Card - 5</p>
                </div>
              </div>
            </div>
          </div>
          <div class="carousel-item">
            <div class="col-md-4">
              <div class="card carousel-card">
                <h5 class="card-title">Six</h5>
                <h6 class="card-subtitle">6</h6>
                <div class="card-body p-0">
                  <p class="card-text text-center text-monospace">Card - 6</p>
                </div>
              </div>
            </div>
          </div>
        </div>
        <a class="carousel-control-button carousel-control-prev-button" href="#more-about-carousel" role="button" data-slide="prev">
                            &lsaquo;
                        </a>
        <a class="carousel-control-button carousel-control-next-button" href="#more-about-carousel" role="button" data-slide="next">
                            &rsaquo;
                        </a>
      </div>
    </div>
  </div>
</div>