JQueryを使用してyoutubeビデオスライダーを作成することは可能ですか?アップロードしたものをいくつか表示したいと思います。
いくつかの答えを見つけましたが、特定のフレームワークで作成しました。可能であれば、単純なものに固執したいと思います。
このコードは非常に役立ちましたが、動作するようには思えません。
$('.play-button').on('click', function () {
$(this).hide();
$(this).parent().fadeOut();
$(this).parent().siblings('.slider-video')[0].play();
});
$('.slider-video').on('play', function () {
$(this).attr('controls', '1');
});
// Additionnal code for the slider
var pos = 0,
slides = $('.slide'),
numOfSlides = slides.length;
function nextSlide(){
stopCurrentVideo();
slides.eq(pos).animate({left:'-100%'},500);
pos = pos >= numOfSlides-1 ? 0 : ++pos;
slides.eq(pos).css({left:'100%'}).animate({left:0},500);
}
function previousSlide(){
stopCurrentVideo();
slides.eq(pos).animate({left:'100%'},500);
pos = pos == 0 ? numOfSlides-1 : --pos;
slides.eq(pos).css({left:'-100%'}).animate({left:0},500);
}
function stopCurrentVideo(){
$('.slider-video:eq('+pos+')').load().removeAttr('controls')
.siblings('.overlay-content').show().find('.play-button').show();
}
$('.left').click(previousSlide);
$('.right').click(nextSlide);
スライダーは正常に動作しているようです。コードをVideoタグからYouTube Embed Codeに変更するだけで、Youtubeプレーヤーのカルーセルができます。
<div class="video-slider">
<!-- SLIDE 1 -->
<div class="slide">
<div style="position:relative;height:0;padding-bottom:56.28%"><iframe src="https://www.youtube.com/embed/YE7VzlLtp-4?ecver=2" style="position:absolute;width:100%;height:100%;left:0" width="640" height="360" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></div>
</div>
<!-- SLIDE 2 -->
<div class="slide">
<div style="position:relative;height:0;padding-bottom:56.28%"><iframe src="https://www.youtube.com/embed/EngW7tLk6R8?ecver=2" style="position:absolute;width:100%;height:100%;left:0" width="640" height="360" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></div>
</div>
<!-- END OF SLIDES -->
<div class="slide-arrow left"></div>
<div class="slide-arrow right"></div>
</div>
YouTube埋め込みコードを取得するには、youtube.comの動画を右クリックして[埋め込みコードのコピー]を選択し、スライダーでそのコードを使用します。
それが役に立てば幸い。
著者のフィドルをフォークして、変更を加えました。 JSFiddle
YouTube iFrame APIでこれを実現できます。
https://developers.google.com/youtube/iframe_api_reference
このAPIは、enablejsapi=1
をYouTubeビデオ埋め込みのURLに追加すると使用可能になります。
ビデオを停止するためのコントロールにアクセスするには、ビデオごとにYT.Player
のインスタンスにアクセスする必要があります。各iFrameについて、YT.Player
のインスタンスを作成し、slide
というパラメーターとしてvideo
オブジェクトに直接アタッチしました。
(多くの開発者は、DOMオブジェクトに直接データを添付するべきではないと言っていることに注意してください。しかし、元のコードにより厳密に一致させることができるため、ここで追加しました。)
YT.Player
は、onYouTubeIframeAPIReady
と呼ばれる特別な関数を介してアクセスできます。この関数は、$(document).ready
のoutsideである場合にのみ機能します。
IFrameはNiceを再生しないため、JSFiddleにソリューションを配置できません。GitHubでの実装は次のとおりです。
http://robertakarobin.github.io/jquery-video-sliderhttps://github.com/robertakarobin/jquery-video-slider
関連するビットは次のとおりです。
HTML:
<div class="video-slider">
<!-- SLIDE 1 -->
<div class="slide">
<iframe class="video" src="https://www.youtube.com/embed/YE7VzlLtp-4?ecver=2&enablejsapi=1"></iframe>
</div>
<!-- SLIDE 2 -->
<div class="slide">
<iframe class="video" src="https://www.youtube.com/embed/YE7VzlLtp-4?ecver=2&enablejsapi=1"></iframe>
</div>
<!-- END OF SLIDES -->
<div class="slide-arrow left"></div>
<div class="slide-arrow right"></div>
</div>
JavaScript:
$(document).ready(function () {
var pos = 0,
slides = $('.slide'),
numOfSlides = slides.length;
function nextSlide() {
// `[]` returns a Vanilla DOM object from a jQuery object/collection
slides[pos].video.stopVideo()
slides.eq(pos).animate({ left: '-100%' }, 500);
pos = (pos >= numOfSlides - 1 ? 0 : ++pos);
slides.eq(pos).css({ left: '100%' }).animate({ left: 0 }, 500);
}
function previousSlide() {
slides[pos].video.stopVideo()
slides.eq(pos).animate({ left: '100%' }, 500);
pos = (pos == 0 ? numOfSlides - 1 : --pos);
slides.eq(pos).css({ left: '-100%' }).animate({ left: 0 }, 500);
}
$('.left').click(previousSlide);
$('.right').click(nextSlide);
})
function onYouTubeIframeAPIReady() {
$('.slide').each(function (index, slide) {
// Get the `.video` element inside each `.slide`
var iframe = $(slide).find('.video')[0]
// Create a new YT.Player from the iFrame, and store it on the `.slide` DOM object
slide.video = new YT.Player(iframe)
})
}