简体   繁体   English

在 bootstrap 4 carousel 中为上一张和下一张幻灯片制作动画

[英]Animate previous and next slide in bootstrap 4 carousel

I'm using bootstrap 4 carousel and I have customized it for project.我正在使用bootstrap 4 carousel ,并为项目定制了它。

My basic requirement is我的基本要求是

    • When i click next slide then current next slide becomes active and new next slide is loaded which should be animated like it is coming from outside of viewport right.当我单击下一张幻灯片时,当前的下一张幻灯片将变为活动状态并加载新的下一张幻灯片,该幻灯片应该像来自视口右侧一样进行动画处理。
    • Current active slide will become previous so previously available slide should animate like going outside of viewport left.当前活动幻灯片将变为上一个,因此以前可用的幻灯片应该像离开视口左侧一样进行动画处理。
  1. Same for previous click.与上一次点击相同。

Quick Overview:快速概览:

  • Every next slide should come and go from right side of viewport每一张下一张幻灯片都应该从视口右侧出现和 go
  • Every previous slide should come and go from left side of viewport前每张幻灯片都应该从视口左侧出现,go

left slide is: previous middle slide is: active right slide is: next左滑是:上一张 中滑是:活动的 右滑是:下一张

Here is the my carousel code snippet: I have used Jquery 3.5.1 and Bootstrap 4.6这是我的轮播代码片段:我使用了 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>

Note: Script Error is showing here only, not in my local machine.注意:脚本错误仅在此处显示,不在我的本地计算机中。

Tried something different:尝试了一些不同的东西:

But not able to scale down left and right elements.但无法缩小左右元素。

 $('#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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Bootstrap Carousel 幻灯片对于“NEXT”不平滑,但对于“PREVIOUS”来说是平滑的 - Bootstrap Carousel slide is not smooth for "NEXT" but smooth for "PREVIOUS" 如何在轮播中显示上一张和下一张幻灯片? - How to show on the carousel a piece of the previous and next slide? 利用引导轮播“幻灯片”事件和 .next 类 - Utilise the Bootstrap Carousel "slide" event and the .next class Bootstrap3轮播 - 随机挑选下一张幻灯片 - Bootstrap3 carousel - picking random next slide Simple Bootstrap 4 Carousel,下一张幻灯片的一部分靠近主要轮播项目 - Simple Bootstrap 4 Carousel with a part of the next slide near the main carousel item 在Twitter Bootstrap Carousel中显示下一张和上一张图片 - Show next and previous image in Twitter Bootstrap Carousel 显示带有引导轮播的预览(上一张和下一张图片) - Showing previews (previous and next image) with bootstrap carousel 引导轮播下一个和上一个图像不显示 - bootstrap carousel next and previous images not displaying 滑动到下一张幻灯片时,光滑的滑块表现得像 Bootstrap Carousel - Slick slider behave like Bootstrap Carousel when sliding to next slide 在 Bootstrap 4 Carousel 单击下一步时,第一张幻灯片计数不起作用 - First slide count doesn't work on clicking next for Bootstrap 4 Carousel
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM