【コピペで使える】レスポンシブ対応のYouTube動画スライダー実装サンプル
自身のウェブサイトで、YouTubeの埋め込み動画をかっこよくスライダーで表示させたいと考えたことはないでしょうか?今回はその実装サンプルをご紹介します。(最後にサンプルファイルのダウンロードリンクを記載しています)
デモ
実装の準備
今回スライダーには「Swiper」というJavascriptライブラリを利用します。
このライブラリを使うには以下のJSファイルとCSSファイルをCDNで読み込ませておく必要があります。
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.1/css/swiper.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.1/js/swiper.min.js"></script>
実装方法
HTML部
<div id="slider" class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">
<!-- YouTube埋め込みコード -->
</div>
<div class="swiper-slide">
<!-- YouTube埋め込みコード -->
</div>
<div class="swiper-slide">
<!-- YouTube埋め込みコード -->
</div>
</div>
<div class="swiper-button-prev swiper-button-white"></div>
<div class="swiper-button-next swiper-button-white"></div>
</div>
<div id="thumbs" class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">
<!-- YouTube動画サムネイル -->
</div>
<div class="swiper-slide">
<!-- YouTube動画サムネイル -->
</div>
<div class="swiper-slide">
<!-- YouTube動画サムネイル -->
</div>
</div>
</div>
動作確認がしやすいようにサンプルでは動画を3つ表示する設定としていますが、動画数を変更したい場合は「swiper-slideクラス」を追加・削除すればOKです。
JS部
<script>
<!--
var slider = new Swiper ('#slider', {
nextButton: '.swiper-button-next',
prevButton: '.swiper-button-prev'
})
var thumbs = new Swiper('#thumbs', {
centeredSlides: true,
spaceBetween: 10,
slidesPerView: "auto",
touchRatio: 0.2,
slideToClickedSlide: true
});
slider.params.control = thumbs;
thumbs.params.control = slider;
-->
</script>
Javascriptコードはこのライブラリでのほぼ定型のサンプルコードとなりますのであまり深く考えずにコピペしてもらえばよいと思います。
CSS部
<style>
.swiper-container{
text-align: center;
}
.swiper-container .swiper-slide img{
max-width: 100%;
width: 100%;
height: auto;
}
.swiper-container .swiper-slide {
position: relative;
width: 100%;
}
.swiper-container .swiper-slide:before {
content:"";
display: block;
padding-top: 56.25%;
}
.swiper-container .swiper-slide iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
#thumbs {
height: 20%;
box-sizing: border-box;
padding: 10px 0;
}
#thumbs .swiper-slide {
width: 20%;
height: 100%;
opacity: 0.2;
cursor: pointer;
}
#thumbs .swiper-slide:before {
content:none;
}
#thumbs .swiper-slide-active {
opacity: 1;
}
</style>
こちらはもともと画像ベースのサンプルコードでしたが今回iframe向けに改造をしています。レスポンシブデザインでも動画プレイヤーの縦横比を保つ仕様としているのでスマートフォンでのデザイン崩れも回避できるかと思います。
まとめ
ただ動画を見せるだけでなくおしゃれに演出したいといった場合には重宝する実装サンプルになるかと思いますので、よろしければコピペでお使いいただければと思います。
最後にサンプルファイルを用意いたしましたので、以下リンクから名前をつけてファイルを保存でダウンロードしてください。








はじめまして。これぞまさに求めていた内容といった感じで、
大変参考になりました。
ところで、もしお時間があれば、一点下記の問題を解決できる
アイディアをお持ちでないでしょうか?
動画の再生をし、「停止をせずにそのまま」
次の動画を観ようとスライドさせると、
直前に再生していた動画は
観えていない状態ではあるが再生され続けているので、
現在アクティブな動画と音が重なってしまう。
⇒YoutubeのAPI??と組み合わせて停止させたり、
サムネイルをスライドするとアクティブでない動画は存在自体を消して
アクティブになったら復活させる?????というような
処理をすべきなのでしょうか。
かなりいろいろな方が望んでいる情報かもしれませんので
もしいつかお時間があればご教示ください・・!
不躾なお願い失礼しました。
この度はコメント頂きましてありがとうございます。
記事の方お役に立ったようで大変嬉しく思います。
おっしゃいます通り、再生した動画音声が重なってゆくのは改善点ですね・・・。
YouTubeAPIではJS経由でiframe内の動画の再生コントロールができますので実現性はあると思います。
できるだけシンプルで汎用性の高いコードの紹介を目指しているので、もしすっきりとした実装ができそうであれば今後反映をしてみたいと思います。
スライダーの切り替わりを検知して前の動画と現在の動画の判別ができればやりようはありそうですね。
初心者です。
勉強のため、コピペで同じものを作ってみました。
形は同じなのにスライドの矢印を押しても動きません。
サムネイルは、表示されている動画のモノ含め3つとも白がかっています。
Swiperが動かないときの対処法を説明してある他サイト等見ても原因がわからず。。。
コピペは間違いないですし、htmlファイルの書き方も配置は同じになっているのでたぶんあっていると思うのですが。。。何が原因なのでしょうか。。。
初心者すぎるコメントで申し訳ありません。
コメントありがとうございます。
以下に実際に動作が確認できるサンプルファイルを用意いたしましたのでこちらを参考に実装頂ければと思います。
https://tadworks.jp/samplecodes/swiper_sample.html
よろしくお願いいたします。
丁寧なご対応、感謝いたします。
頂いたサンプルファイルを参考にさせていただきます!
こちらよろしくお願いいたします!
不明点などあればお問合せ頂ければと思います。