Custom Youtube Video Gallery With jQuery
File Size: | 4.98 KB |
---|---|
Views Total: | 6175 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |
A custom Youtube video player with a responsive playlist carousel, built with jQuery, Font Awesome, Bootstrap, and Owl Carousel.
How to use it:
1. Load the necessary JavaScript and CSS resources in the document.
<!-- jQuery --> <script src="/path/to/cdn/jquery.min.js"></script> <!-- Bootstrap OPTIONAL --> <link rel="stylesheet" href="/path/to/cdn/bootstrap.min.css" /> <script src="/path/to/cdn/bootstrap.bundle.min.js"></script> <!-- owl.carousel --> <link rel="stylesheet" href="/path/to/cdn/owl.carousel.min.css" /> <script src="/path/to/cdn/owl.carousel.min.js"></script> <!-- Font Awesome 5 --> <link rel="stylesheet" href="/path/to/cdn/all.min.css" />
2. Create an empty container for the custom Youtube video player.
<div class="embed__container"> <div id="player"></div> </div>
3. Create a playlist carousel as follows:
<div class="carousel__wrap"> <div class="owl-carousel"> <div data-video="Video ID 1" class="item video-thumb active"> <img src="thumb-1.jpg" /> </div> <div data-video="Video ID 2" class="item video-thumb active"> <img src="thumb-2.jpg" /> </div> <div data-video="Video ID 3" class="item video-thumb active"> <img src="thumb-3.jpg" /> </div> ... </div> </div>
4. The necessary CSS styles for the custom Youtube video player.
.embed__conttainer { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto; } .embed__container { position: relative; padding-bottom: 56%; width: 100%; text-align: left; background-color: #000000; } .embed__container iframe { width: 100%; position: absolute; height: 100%; overflow: hidden; } #player { width: 100%; } .owl-nav>div { margin-top: -20px; position: absolute; top: 45%; color: #d8d8d8; padding: 0px; width: 46px; display: initial; height: 46px; border-radius: 50px; background: #060606a8; } .owl-nav>div:hover { color: #ffffff; background: #000000; } .owl-nav>div.disabled { color: #ffffff00; background: #63636300; } .owl-nav>div.disabled { color: #ffffff00; background: #63636300; } .owl-nav i { font-size: 20px; margin: 13px 18px; } .owl-nav .owl-prev { left: -23px; } .owl-nav .owl-prev i:hover { transition: all 0.3s ease-in-out; } .owl-nav .owl-next i:hover { transition: all 0.3s ease-in-out; } .owl-nav .owl-next { right: -23px; } .owl-carousel .owl-item .video-thumb.active:before { opacity: 1; content: ""; position: absolute; width: 100%; height: 100%; mix-blend-mode: screen; left: 0; top: 0; background: rgba(247, 148, 30, 0.75); z-index: 1; transition: all 250ms ease-out; } .owl-carousel .owl-item .video-thumb:not(.active):hover:before { opacity: 1; content: ""; position: absolute; width: 100%; height: 100%; mix-blend-mode: screen; left: 0; top: 0; background: rgba(247, 148, 30, 0.30); z-index: 1; transition: all 1s ease-out; } .video-thumb:not(.active):hover:before { background: rgba(247, 148, 30, 0.30); } .video-thumb:after { content: "\f144"; font-family: "Font Awesome 5 Free"; top: 50%; left: 50%; margin: -0.458em 0 0 -0.500em; color: rgba(255, 255, 255, 0); font-size: 2em; line-height: 1; position: absolute; font-weight: 900; transition: all 250ms ease-out; } .video-thumb.active:after { color: rgba(255, 255, 255, 1); } .owl-carousel .owl-item img { position: relative; } #player .ytp-expand-pause-overlay .ytp-pause-overlay { display: none !important; } #playerWrap { display: inline-block; position: relative; } #playerWrap.shown::after { content: ""; position: absolute; top: 0; left: 0; bottom: 0; right: 0; cursor: pointer; background-color: black; background-repeat: no-repeat; background-position: center; background-size: 64px 64px; background-image: url(data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgNTEwIDUxMCI+PHBhdGggZD0iTTI1NSAxMDJWMEwxMjcuNSAxMjcuNSAyNTUgMjU1VjE1M2M4NC4xNSAwIDE1MyA2OC44NSAxNTMgMTUzcy02OC44NSAxNTMtMTUzIDE1My0xNTMtNjguODUtMTUzLTE1M0g1MWMwIDExMi4yIDkxLjggMjA0IDIwNCAyMDRzMjA0LTkxLjggMjA0LTIwNC05MS44LTIwNC0yMDQtMjA0eiIgZmlsbD0iI0ZGRiIvPjwvc3ZnPg==); } .loading__text__player { left: 50%; top: 50% }
5. Activate the custom Youtube video player & playlist.
var tag = document.createElement('script'); tag.src = 'https://www.youtube.com/iframe_api'; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubeIframeAPIReady() { player = new YT.Player('player', { height: '315', width: '560', videoId: '92UXfEIc4lI', // replace the default video here playerVars: { color: 'white', showinfo: 0, rel: 0, enablejsapi: 1, modestbranding: 1, showinfo: 0, ecver: 2, }, events: { onStateChange: onPlayerStateChange, onReady: function () { $('.ytp-expand-pause-overlay .ytp-pause-overlay').css( 'display', 'none' ); $('.video-thumb').click(function () { console.log('clicked'); var $this = $(this); if (!$this.hasClass('active')) { player.loadVideoById($this.attr('data-video')); $('.video-thumb').removeClass('active'); $this.addClass('active'); } }); }, }, }); function onPlayerStateChange(e) { console.log('state'); if (e.data == YT.PlayerState.ENDED) { document.getElementById('playerWrap').classList.add('shown'); } } document.getElementById('playerWrap').addEventListener('click', function () { player.seekTo(0); document.getElementById('playerWrap').classList.remove('shown'); }); } (function ($) { $(document).ready(function () { $('.owl-carousel').owlCarousel({ loop: false, margin: 10, nav: true, navText: [ "<i class='fas fa-chevron-left'></i>", "<i class='fas fa-chevron-right'></i>", ], autoplay: false, autoplayHoverPause: true, responsive: { 0: { items: 3, }, 600: { items: 4, }, 1000: { items: 5, }, }, }); }); })(jQuery);
This awesome jQuery plugin is developed by stoXmod. For more Advanced Usages, please check the demo page or visit the official website.