我正在使用全屏Bootstrap 4轮播。幻灯片不包含图片,但包含视频和字幕。
我的目的是在活动幻灯片的左侧和右侧,滑块控件上方放置幻灯片的标题,以给人以“”作为控件使用标题的印象。可以在下面看到所需效果的说明:
为了实现我的目标,我编写了以下代码:
var slider = $('#full_slider');
var slidesNo = slider.find('.carousel-item').length;
var fullSliderNavigation = function(index) {
var slide = slider.find('.carousel-item').eq(index);
if (slide.is(':first-child')) {
var slidePrev = slider.find('.carousel-item').eq(slidesNo - 1);
} else {
var slidePrev = slider.find('.carousel-item').eq(index - 1);
}
if (slide.is(':last-child')) {
var slideNext = slider.find('.carousel-item').eq(0);
} else {
var slideNext = slider.find('.carousel-item').eq(index + 1);
}
$('.carousel-item').removeClass('right-slide left-slide');
slideNext.addClass('right-slide');
slidePrev.addClass('left-slide');
}
$(document).ready(function() {
fullSliderNavigation(0);
$(slider).on('slide.bs.carousel', function(event) {
var index = $(event.relatedTarget).index();
fullSliderNavigation(index);
});
});

#full_slider {
position: relative;
justify-content: flex-start;
align-items: center;
}
#full_slider .carousel-item {
position: relative;
height: 100vh;
justify-content: center;
align-items: center;
}
#full_slider .carousel-item .video-caption {
position: absolute;
left: 0;
top: 50%;
transition: all 500ms;
transform: translateX(-60px) translateY(-50%);
width: 100%;
max-width: 600px;
color: #fff;
}
#full_slider .carousel-item .allcases {
font-size: 18px;
margin-top: auto;
display: none;
}
#full_slider .carousel-item .allcases a {
color: #fff;
}
#full_slider .carousel-item.active,
#full_slider .carousel-item-left,
#full_slider .carousel-item-right {
display: flex !important;
}
#full_slider .carousel-item.active .video-caption {
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
#full_slider .carousel-item.active .allcases {
display: block;
}
#full_slider video {
position: absolute;
left: 0;
top: 0;
width: 100vw;
height: auto;
z-index: -1;
}
#full_slider h3 {
font-weight: 900;
font-size: 100px;
}
#full_slider .control {
display: block;
text-align: center;
font-weight: 900;
font-size: 100px;
overflow: hidden;
}

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<div class="page-wrapper">
<div id="full_slider" class="carousel slide" data-ride="carousel" data-interval="false">
<div class="carousel-inner" role="listbox">
<div class="carousel-item active">
<video src="https://code-love.tk/video/koffee.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">All about us</h3>
<p class="allcases">
<a class="inherit" href="#"><a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/flamenco.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Lorem ipsum dolor</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/protest.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Falling in love</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Coffe</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Dealing with danger</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
<a class="carousel-control carousel-control-prev" href="#full_slider" role="button" data-slide="prev">
<span class="control text-left"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control carousel-control-next" href="#full_slider" role="button" data-slide="next">
<span class="control text-left"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
&#13;
这里的(显而易见的)问题是,有效幻灯片左侧和右侧的幻灯片有display: none;
,因此其标题不可见。
默认情况下,Bootstrap 4轮播需要此功能。如何显示它们并仍让旋转木马工作?
答案 0 :(得分:1)
您可以将“ flickity” jquery滑块用于所需的输出,请参见以下示例:
$('#full_slider').flickity({
wrapAround: true,
on: {
ready: function() {
$('.carousel-cell:first-child()').find('video').get(0).play();
},
change: function( index ) {
$('.is-selected').find('video').get(0).play();
}
}
});
#full_slider .slide-content {
position: relative;
height: 100vh;
width: 70vw;
justify-content: center;
align-items: center;
}
#full_slider .slide-content .video-caption {
position: absolute;
left: 50%;
top: 50%;
transition: all 500ms;
transform: translate(-50%, -50%);
width: 100%;
max-width: 600px;
color: #fff;
}
#full_slider .slide-content .allcases {
font-size: 18px;
margin-top: auto;
display: none;
}
#full_slider .slide-content .allcases a {
color: #fff;
}
#full_slider video {
position: absolute;
left: 50%;
top: 50%;
width: 100%;
height: auto;
z-index: -1;
transform: translate(-50%, -50%);
}
#full_slider h3 {
font-weight: 900;
font-size: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- CSS -->
<link rel="stylesheet" href="https://unpkg.com/flickity@2/dist/flickity.min.css">
<!-- JavaScript -->
<script src="https://unpkg.com/flickity@2/dist/flickity.pkgd.min.js"></script>
<div class="page-wrapper">
<div class="main-carousel" id="full_slider">
<div class="carousel-cell is-selected">
<div class="slide-content">
<video src="https://code-love.tk/video/koffee.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">All about us</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
<div class="carousel-cell">
<div class="slide-content">
<video src="https://code-love.tk/video/flamenco.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Lorem ipsum dolor</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
<div class="carousel-cell">
<div class="slide-content">
<video src="https://code-love.tk/video/protest.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Falling in love</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
<div class="carousel-cell">
<div class="slide-content">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Coffe</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
<div class="carousel-cell">
<div class="slide-content">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Dealing with danger</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
</div>
</div>
jquery插件的链接:flickity
答案 1 :(得分:1)
整页:https://codepen.io/devanshj/full/MXXdvO/
使用代码:https://codepen.io/devanshj/pen/MXXdvO
已使用flickity。因为它为我们处理了困难的事情。
默认情况下,.content
位于中间。要将幻灯片的内容移动到与所选幻灯片相邻的位置,请将[{1}}和translateX(calc( (100vw-100%)/2 + 5vw )*-1)
分别移至下一张和上一张幻灯片
为translateX(calc( (100vw-100%)/2 + 5vw ))
添加了一个事件处理程序,该事件处理程序将flickity.scroll
与所选幻灯片的移动量成比例地添加,以使marginLeft
最终返回到原始(中心)位置
PS:我将.content
保留在autoplay
上,但是它不起作用。可能是因为位于video
答案 2 :(得分:0)
如果你想将左右幻灯片的广告标题作为滑块的控件,你可以使用jquery将左右两个幻灯片的标题内容复制到左侧和右侧控件,请参阅下面的代码我已正确添加了一些显示内容的CSS,可以添加你的CSS
var slider = $('#full_slider');
var slidesNo = slider.find('.carousel-item').length;
var fullSliderNavigation = function(index) {
var slide = slider.find('.carousel-item').eq(index);
if (slide.is(':first-child')) {
var slidePrev = slider.find('.carousel-item').eq(slidesNo - 1);
} else {
var slidePrev = slider.find('.carousel-item').eq(index - 1);
}
if (slide.is(':last-child')) {
var slideNext = slider.find('.carousel-item').eq(0);
} else {
var slideNext = slider.find('.carousel-item').eq(index + 1);
}
$('.carousel-item').removeClass('right-slide left-slide');
slideNext.addClass('right-slide');
slidePrev.addClass('left-slide');
$('.carousel-control-next').html(slideNext.find('.video-caption').html());
$('.carousel-control-prev').html(slidePrev.find('.video-caption').html());
}
$(document).ready(function() {
fullSliderNavigation(0);
$(slider).on('slide.bs.carousel', function(event) {
var index = $(event.relatedTarget).index();
fullSliderNavigation(index);
});
});
#full_slider {
position: relative;
justify-content: flex-start;
align-items: center;
}
#full_slider .carousel-item {
position: relative;
height: 100vh;
justify-content: center;
align-items: center;
}
#full_slider .carousel-item .video-caption {
position: absolute;
left: 0;
top: 50%;
transition: all 500ms;
transform: translateX(-60px) translateY(-50%);
width: 100%;
max-width: 600px;
color: #fff;
}
#full_slider .carousel-item .allcases {
font-size: 18px;
margin-top: auto;
display: none;
}
#full_slider .carousel-item .allcases a {
color: #fff;
}
#full_slider video {
position: absolute;
left: 0;
top: 0;
width: 100vw;
height: auto;
z-index: -1;
}
#full_slider h3 {
font-weight: 900;
font-size: 100px;
}
#full_slider .carousel-control h3 {
font-size: 18px;
display:block;
}
#full_slider .carousel-control p {
font-size: 14px;
display:block;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<div class="page-wrapper">
<div id="full_slider" class="carousel slide" data-ride="carousel" data-interval="false">
<div class="carousel-inner" role="listbox">
<div class="carousel-item active">
<video src="https://code-love.tk/video/koffee.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">All about us</h3>
<p class="allcases">
<a class="inherit" href="#"><a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/flamenco.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Lorem ipsum dolor</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/protest.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Falling in love</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Coffe</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Dealing with danger</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
<a class="carousel-control carousel-control-prev" href="#full_slider" role="button" data-slide="prev">
</a>
<a class="carousel-control carousel-control-next" href="#full_slider" role="button" data-slide="next">
</a>
</div>
</div>
答案 3 :(得分:0)
添加了以下样式div
在JS中无需更改
#full_slider .carousel-item.left-slide,
#full_slider .carousel-item.right-slide {
position: absolute;
top: 0;
display: block;
}
#full_slider .carousel-item.left-slide {
z-index: 2;
left: -90%;
overflow: hidden;
}
#full_slider .carousel-item.active {
width: 100%;
z-index: 1;
}
#full_slider .carousel-item.right-slide {
z-index: 2;
right: -90%;
}
#full_slider .carousel-item.left-slide video,
#full_slider .carousel-item.right-slide video {
display: none;
}
.carousel-control-next,
.carousel-control-prev {
z-index: 5;
}
#full_slider .carousel-item.left-slide .video-caption {
right: 0;
left: auto;
text-align: right;
}
#full_slider .carousel-item.left-slide .video-caption,
#full_slider .carousel-item.right-slide .video-caption {
transform: translate(0, -50%);
}
var slider = $('#full_slider');
var slidesNo = slider.find('.carousel-item').length;
var fullSliderNavigation = function(index) {
var slide = slider.find('.carousel-item').eq(index);
if (slide.is(':first-child')) {
var slidePrev = slider.find('.carousel-item').eq(slidesNo - 1);
} else {
var slidePrev = slider.find('.carousel-item').eq(index - 1);
}
if (slide.is(':last-child')) {
var slideNext = slider.find('.carousel-item').eq(0);
} else {
var slideNext = slider.find('.carousel-item').eq(index + 1);
}
$('.carousel-item').removeClass('right-slide left-slide');
slideNext.addClass('right-slide');
slidePrev.addClass('left-slide');
}
$(document).ready(function() {
fullSliderNavigation(0);
$(slider).on('slide.bs.carousel', function(event) {
var index = $(event.relatedTarget).index();
fullSliderNavigation(index);
});
});
#full_slider {
position: relative;
justify-content: flex-start;
align-items: center;
}
#full_slider .carousel-item {
position: relative;
height: 100vh;
justify-content: center;
align-items: center;
}
#full_slider .carousel-item .video-caption {
position: absolute;
left: 0;
top: 50%;
transition: all 500ms;
transform: translateX(-60px) translateY(-50%);
width: 100%;
max-width: 600px;
color: #fff;
}
#full_slider .carousel-item .allcases {
font-size: 18px;
margin-top: auto;
display: none;
}
#full_slider .carousel-item .allcases a {
color: #fff;
}
#full_slider .carousel-item.active,
#full_slider .carousel-item-left,
#full_slider .carousel-item-right {
display: flex !important;
}
#full_slider .carousel-item.active .video-caption {
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
#full_slider .carousel-item.active .allcases {
display: block;
}
#full_slider video {
position: absolute;
left: 0;
top: 0;
width: 100vw;
height: auto;
z-index: -1;
}
#full_slider h3 {
font-weight: 900;
font-size: 100px;
}
#full_slider .control {
display: block;
text-align: center;
font-weight: 900;
font-size: 100px;
overflow: hidden;
}
#full_slider .carousel-item.left-slide,
#full_slider .carousel-item.right-slide {
position: absolute;
top: 0;
display: block;
}
#full_slider .carousel-item.left-slide {
z-index: 2;
left: -90%;
overflow: hidden;
}
#full_slider .carousel-item.active {
width: 100%;
z-index: 1;
}
#full_slider .carousel-item.right-slide {
z-index: 2;
right: -90%;
}
#full_slider .carousel-item.left-slide video,
#full_slider .carousel-item.right-slide video {
display: none;
}
.carousel-control-next,
.carousel-control-prev {
z-index: 5;
}
#full_slider .carousel-item.left-slide .video-caption {
right: 0;
left: auto;
text-align: right;
}
#full_slider .carousel-item.left-slide .video-caption,
#full_slider .carousel-item.right-slide .video-caption {
transform: translate(0, -50%);
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<div class="page-wrapper">
<div id="full_slider" class="carousel slide" data-ride="carousel" data-interval="false">
<div class="carousel-inner" role="listbox">
<div class="carousel-item active">
<video src="https://code-love.tk/video/koffee.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">All about us</h3>
<p class="allcases">
<a class="inherit" href="#"><a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/flamenco.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Lorem ipsum dolor</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/protest.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Falling in love</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Coffe</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<div class="carousel-item">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Dealing with danger</h3>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
</div>
<a class="carousel-control carousel-control-prev" href="#full_slider" role="button" data-slide="prev">
<span class="control text-left"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control carousel-control-next" href="#full_slider" role="button" data-slide="next">
<span class="control text-left"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
var slider = $('#full_slider');
var slidesNo = slider.find('.carousel-item').length;
var fullSliderNavigation = function(index) {
var slide = slider.find('.carousel-item').eq(index);
var slidePrev, slideNext;
if (slide.is(':first-child')) {
slidePrev = slider.find('.carousel-item').eq(slidesNo - 1);
} else {
slidePrev = slider.find('.carousel-item').eq(index - 1);
}
if (slide.is(':last-child')) {
slideNext = slider.find('.carousel-item').eq(0);
} else {
slideNext = slider.find('.carousel-item').eq(index + 1);
}
$('.carousel-item').removeClass('right-slide left-slide');
slideNext.addClass('right-slide');
slidePrev.addClass('left-slide');
}
$(document).ready(function() {
fullSliderNavigation(0);
$(slider).on('slide.bs.carousel', function(event) {
var index = $(event.relatedTarget).index();
fullSliderNavigation(index);
});
});
.carousel-item {
position: relative;
}
.carousel-item .video-caption,
.carousel-item .allcases {
position: absolute;
top: 50%;
left: 25%;
transform: translate(-25%, -50%);
color: white;
}
.carousel-item .allcases {
top: 60%;
left: 25%;
transform: translate(-25%, -60%);
}
.carousel-item .video-caption h3 {
font-size: 100px;
}
.carousel-item video {
width: 100%;
height: 100%;
}
.carousel-inner {
position: relative;
}
.carousel-item::before {
content: attr(data-left);
left: -90%;
text-align: right;
}
.carousel-item::after {
content: attr(data-right);
right: -90%;
text-align: left;
}
.carousel-item::before,
.carousel-item::after {
position: absolute;
top: 50%;
transform: translateY(-50%);
color: white;
font-size: 100px;
font-weight: 500;
width: 100%;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<div id="full_slider" class="carousel slide" data-ride="carousel" data-interval="false">
<div class="carousel-inner">
<div class="carousel-item active" data-left="Dealing with danger" data-right="Lorem ipsum dolor">
<video src="https://code-love.tk/video/koffee.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">All about us</h3>
</div>
<p class="allcases">
<a class="inherit" href="#">Lorem ipsum dolor</a>
</p>
</div>
<div class="carousel-item" data-left="All about us" data-right="Falling in love">
<video src="https://code-love.tk/video/flamenco.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Lorem ipsum dolor</h3>
</div>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
<div class="carousel-item" data-left="Lorem ipsum dolor" data-right="Coffe">
<video src="https://code-love.tk/video/protest.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Falling in love</h3>
</div>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
<div class="carousel-item" data-left="Falling in love" data-right="Dealing with danger">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Coffe</h3>
</div>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
<div class="carousel-item" data-left="Coffe" data-right="All about us">
<video src="https://code-love.tk/video/commerciala.mp4" autoplay loop muted></video>
<div class="video-caption">
<h3 class="capt text-boldest">Dealing with danger</h3>
</div>
<p class="allcases">
<a class="inherit" href="#">See more</a>
</p>
</div>
</div>
<a class="carousel-control carousel-control-prev" href="#full_slider" role="button" data-slide="prev">
<span class="control text-left"></span>
</a>
<a class="carousel-control carousel-control-next" href="#full_slider" role="button" data-slide="next">
<span class="control text-left"></span>
</a>
</div>