【slick.js】とYouTube
2020-07-02
前回の投稿で、slick.jsの基本的な使い方を記載しましたが、今回は、スライドショーの中にYouTubeの動画が入っている場合についてです。
スライドショーの部分にYouTubeを入れた場合、そのままでもいいですが、表示されたタイミングで、動画再生させる方法もあるので、それについてまとめます。
1 2 3 4 5 6 |
<div class="slide"> <div>Contents</div> <div> /* YouTube動画 */ </div> <div>Contents</div> <div>Contents</div> </div> |
このようにスライドショーの間にYouTube動画があるとします。
このスライドでは、長い動画でやっているので、切り替わった時に一時停止、また表示する時に再生という形になっているので、違和感がありますが、動画を30秒前後の動画にして、切り替わるタイミングをきちんと設定すれば、動画が表示されるたびに、始めからスタートとすることができます。
また、iframeのパラメータで、 enablejsapi=1 を付与していないと、この動作はされませんので、ご注意ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
var $slider = $('.slide'); $slider.slick({ autoplay: true, autoplaySpeed: 4000, arrows: false, dots: true, fade: true, pauseOnHover: false, pauseOnFocus: false, speed: 1000, zIndex: 100 }); sliderMovie(); function sliderMovie() { if($slider.find('iframe').get(0) && $(window).width() > 768) { var $movie = $slider.find('iframe'); var slick; $slider.on("init", function(slick){ slick = $(slick.currentTarget); setTimeout(function(){ playPauseVideo(slick, "play"); }, 1000); }); $slider.on("beforeChange", function(event, slick) { slick = $(slick.$slider); playPauseVideo(slick,"pause"); }); $slider.on("afterChange", function(event, slick, currentSlide) { slick = $(slick.$slider); playPauseVideo(slick,"play"); switch (currentSlide){ case 1: $(this).slick("slickSetOption", "autoplaySpeed", 30000); break; } }); } } function playPauseVideo(slick, control){ var currentSlide, player; currentSlide = slick.find(".slick-current"); player = currentSlide.find("iframe").get(0); switch (control) { case "play": postMessageToPlayer(player, { "event": "command", "func": "mute" }); postMessageToPlayer(player, { "event": "command", "func": "playVideo" }); break; case "pause": postMessageToPlayer(player, { "event": "command", "func": "pauseVideo" }); } } function postMessageToPlayer(player, command){ if (player == null || command == null) return; player.contentWindow.postMessage(JSON.stringify(command), "*"); } |
こちらのサイトを参考にさせていただきました。
参考サイト