カルーセルのみのブートストラップCSS/Javascript
現在、コントロール付きのカルーセルを使用しています
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<video controls="true">
<source src="www.youtube.com/watch?v=3bGNuRtlqAQ" type="video/mp4" />
</video>
</div>
<div class="carousel-item">
<video controls="true">
<source src="www.youtube.com/watch?v=3bGNuRtlqAQ" type="video/mp4" />
</video>
</div>
<div class="carousel-item">
<img class="d-block w-100" src="..." alt="Third slide">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
誰もがこの関数のCSSコードとJavaScriptコードを持っていますか? (私のメインCSSと競合するので、ファイル全体は必要ありません)
古い Pen を見つけて、ニーズに合わせて少しカスタマイズしました。
ここにスタンドアロンBootstrap 4カルーセル(依存関係なし(jQueryも含む))があります):
更新1:画像ソースを追加し、デフォルトの高さを70vh
に設定しました
アップデート2:ビデオを追加-iframeサポート。 SOFはビデオ/ iframeバックグラウンドを許可していないようですので、これが codepen ソースです。
const carousel = document.getElementById('carouselExampleControls')
const items = carousel.querySelectorAll('.carousel-item');
let currentItem = 0;
let isActive = true;
function setCurrentItem(index) {
currentItem = (index + items.length) % items.length;
}
function hideItem(direction) {
isActive = false;
items[currentItem].classList.add(direction);
items[currentItem].addEventListener('animationend', function() {
this.classList.remove('active', direction);
});
}
function showItem(direction) {
items[currentItem].classList.add('next', direction);
items[currentItem].addEventListener('animationend', function() {
this.classList.remove('next', direction);
this.classList.add('active');
isActive = true;
});
}
document.getElementById('carouselPrev').addEventListener('click', function(e) {
e.preventDefault()
if (isActive) {
hideItem('to-right');
setCurrentItem(currentItem - 1);
showItem('from-left');
}
});
document.getElementById('carouselNext').addEventListener('click', function(e) {
e.preventDefault()
if (isActive) {
hideItem('to-left');
setCurrentItem(currentItem + 1);
showItem('from-right');
}
});
*,
*::after,
*::before {
box-sizing: border-box;
}
img {
display: block;
vertical-align: middle;
}
body {
margin: 0;
font-family: sans-serif;
}
.carousel {
position: relative;
}
.carousel-inner {
position: relative;
width: 100%;
overflow: hidden;
}
.carousel-inner>.carousel-item {
position: relative;
display: none;
animation: 0.6s ease-in-out;
height: 70vh; /* Set your height */
}
.carousel-item>.carousel-img {
width: 100%;
min-height: 70vh; /* same height */
height: auto;
}
.carousel-item.carousel-video {
display: block;
object-fit: cover;
position: absolute;
top: 50%;
left: 50%;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
z-index: 0;
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
/* uncomment the following line if you want to prevent mouse (or touch) clicks */
/* pointer-events: none; */
}
.carousel-inner>.active,
.carousel-inner>.next {
display: block;
}
.carousel-inner>.next {
position: absolute;
top: 0;
width: 100%;
}
.carousel-inner>.to-left {
animation-name: left;
}
.carousel-inner>.from-right {
animation-name: right;
}
.carousel-inner>.to-right {
animation-name: right;
animation-direction: reverse;
}
.carousel-inner>.from-left {
animation-name: left;
animation-direction: reverse;
}
.carousel-control {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 15%;
cursor: pointer;
}
.carousel-control-prev,
.carousel-control-next {
position: absolute;
top: 0;
bottom: 0;
z-index: 1;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
-ms-flex-pack: center;
justify-content: center;
width: 15%;
color: #fff;
text-align: center;
opacity: 0.5;
transition: opacity 0.15s ease;
}
@media (prefers-reduced-motion: reduce) {
.carousel-control-prev,
.carousel-control-next {
transition: none;
}
}
.carousel-control-prev:hover,
.carousel-control-prev:focus,
.carousel-control-next:hover,
.carousel-control-next:focus {
color: #fff;
text-decoration: none;
outline: 0;
opacity: 0.9;
}
.carousel-control-prev {
left: 0;
}
.carousel-control-next {
right: 0;
}
.carousel-control-prev-icon,
.carousel-control-next-icon {
display: inline-block;
width: 20px;
height: 20px;
background: no-repeat 50% / 100% 100%;
}
.carousel-control-prev-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e");
}
.carousel-control-next-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e");
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
position: static;
width: auto;
height: auto;
overflow: visible;
clip: auto;
white-space: normal;
}
@keyframes left {
from {
left: 0;
}
to {
left: -100%;
}
}
@keyframes right {
from {
left: 100%;
}
to {
left: 0;
}
}
<div id="carouselExampleControls" class="carousel">
<div class="carousel-inner">
<!-- YouTube Video -->
<div class="carousel-item active">
<iframe class="carousel-video" width="100%" height="100%" src="https://www.youtube.com/embed/QEbuc3cgmsI" frameborder="0"
allowfullscreen></iframe>
<!-- add "?autoplay=1" at the end of the URL for autoplay i.e. https://www.youtube.com/embed/QEbuc3cgmsI?autoplay=1 -->
</div>
<!-- Local Video -->
<div class="carousel-item">
<video class="carousel-video" autoplay muted loop playsinline preload="metadata"
poster="http://techslides.com/demos/sample-videos/small.jpg">
<source src="http://techslides.com/demos/sample-videos/small.webm" type="video/webm">
<source src="http://techslides.com/demos/sample-videos/small.ogv" type="video/ogg">
<source src="http://techslides.com/demos/sample-videos/small.mp4" type="video/mp4">
</video>
</div>
<!-- Image -->
<div class="carousel-item">
<img class="carousel-img" alt="Second slide" src="https://source.unsplash.com/collection/190728/1920x1080">
</div>
</div>
<a id="carouselPrev" class="carousel-control-prev" href="#carouselExampleControls" role="button">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a id="carouselNext" class="carousel-control-next" href="#carouselExampleControls" role="button">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
Webpackなどのバンドラーを使用している場合は、 ここ で説明されているように、個々のコンポーネントをインポートしてコンパイルできます。
コードを書き直す必要があります。 BootstrapはWorld Wide Web 2.0のパターンです。あなたのサイトはBootstrapのすべての機能できれいに見えます。フルBootstrapパッケージをダウンロードして、すべてを使い、何もしないでください https://getbootstrap.com/docs/4.4/getting-started/download/ を使用してください。10年後に投稿情報の時代が始まります-Bootstrapが確定します。最後に、プログラムはデータサイズではありません。
bootstrapを使用する必要がない場合は、スライダーセクション以外のセクションでWebサイトを使用する場合、スライダーにのみ外部ライブラリを使用することをお勧めします。bootstrap =ライブラリスライダーコードのみをフィルターするのは簡単ではありません。
これは、スライダーのみのリファレンスWebサイトリンクです。 https://kenwheeler.github.io/slick/
このSlierはカスタマイズが簡単で、Jqueryを使用してスライダープロパティを設定するための非常に多くのオプションがあります。
これが問題の解決に役立つことを願っています。これはSLiderライブラリにすぎないため、メインのCSSと競合しないため、このライブラリをコードに簡単に追加できます。
ありがとうございました...
これは、Nathanielがあなたに提案したことの例です。
_<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.8.0/css/bulma.min.css" />
<link rel="stylesheet" href="style.css" />
_
もちろん、あなたのケースではBootstrapを使用していますが、このビジュアルがNathanielsの推奨事項のその部分を理解するのに役立つことを願っています。
次に、Bootstrap必要なクラス名を取得するだけで、JavaScriptファイル内に書き込むHTMLに実装できます。
_const carouselTemplate = (videoDetail) => {
return `<div class=“carousel-item-active”>
<video controls=“true”>
<source src=“${videoDetail.id}”>
</video>
</div>`;
}
_
次に、そのHTMLをDOMにレンダリングして、次のようにHTMLに要素を作成できます。
_<div id="carousel"></div>
_
次にJavaScriptファイルに戻って、次のようにします。
_document.querySelector('#carousel').innerHTML = carouselTemplate(response.data);
_
渡した_response.data
_は、videoDetail
データオブジェクトにすることができます。
_const onVideoSelect = async video => {
const response = await axios.get('http://www.youtube.com/');
document.querySelector('#carousel').innerHTML = carouselTemplate(response.data)
}
_
YouTubeが特定のIDの動画を取得するaxios.get()
には、おそらくparamsオブジェクトが不足している可能性がありますが、現在、目の前にYouTube APIドキュメントがありません。