angular-youtube-embed
angular-youtube-embed copied to clipboard
:tv: Embed a YouTube player with a simple directive
Angular YouTube Embed
Embed a YouTube player with a simple directive.
$ npm install --save angular-youtube-embed
or
$ bower install --save angular-youtube-mb
Can I use it?
Sure! Let me show you.
<!-- Include YT library and this directive -->
<script src="https://www.youtube.com/iframe_api"></script>
<script src="angular-youtube-embed.js"></script>
// Create your app with 'youtube-embed' dependency
var myApp = angular.module('myApp', ['youtube-embed']);
// Inside your controller...
myApp.controller('MyCtrl', function ($scope) {
// have a video id
$scope.theBestVideo = 'sMKoNBRZM1M';
});
<!-- Use 'youtube-video' as an element or attribute. -->
<youtube-video video-id="theBestVideo"></youtube-video>
It's that simple. See it in action.
But I only have a URL.
No problem.
$scope.anotherGoodOne = 'https://www.youtube.com/watch?v=18-xvIjH8T4';
<youtube-video video-url="anotherGoodOne"></youtube-video>
What about browserify?
If you are using browserify or webpack, make sure you've installed this module:
$ npm install --save angular-youtube-embed
and use it in your code like this:
require('angular-youtube-embed');
Is that it?
Not quite!
Events and Player Controls
-
youtube.player.ready
-
youtube.player.ended
-
youtube.player.playing
-
youtube.player.paused
-
youtube.player.buffering
-
youtube.player.queued
-
youtube.player.error
Events allow you to keep an eye on the state of things from your controller. For example, if you wanted to a watch a video over and over again forever
myApp.controller('MyCtrl', function ($scope) {
$scope.looper = 'VvTvtIeXJ1I';
$scope.$on('youtube.player.ended', function ($event, player) {
// play it again
player.playVideo();
});
});
A full list of player
methods can be found here.
Player Functions
Add player
to embedded youtube player to reference Youtube's video player object to use player functions like playVideo()
, stopVideo()
:
<!-- use 'player' to reference player object. -->
<youtube-video video-id="'sMKoNBRZM1M'" player="bestPlayer"></youtube-video>
<!-- perform video playback operations -->
<button ng-click="bestPlayer.playVideo()">Play</button>
<button ng-click="bestPlayer.stopVideo()">Stop</button>
Note: playVideo()
, loadVideoById()
won't work in all mobile environments until user initiates playback.
Utilities
These might be handy.
-
youtubeEmbedUtils.getIdFromURL
-
youtubeEmbedUtils.getTimeFromURL
Just inject the service into your controller
myApp.controller('MyCtrl', function ($scope, youtubeEmbedUtils) {
// 'VvTvtIeXJ1I'
console.log(youtubeEmbedUtils.getIdFromURL('https://www.youtube.com/watch?v=VvTvtIeXJ1I'));
});
getIdFromURL
is covered with some tests, but let me know if you find any URLs it doesn't support.
Player Parameters
YouTube's embedded player can take a number of optional parameters. You can find a full list here.
For example, you could hide the player's controls and have it start automatically. Add player-vars
to your embedded player.
<youtube-video video-id="theBestVideo" player-vars="playerVars"></youtube-video>
And define playerVars
in your controller.
$scope.playerVars = {
controls: 0,
autoplay: 1
};
Note: autoplay
won't work on mobile devices.
Player Size
You can set both player-width
and player-height
on the element.
<youtube-video video-id="theBestVideo" player-width="'100%'" player-height="'300px'"></youtube-video>
Both values are treated as expressions, which is why the inner single-quotes are need.
Responsive Videos
You'll need to add a few classes to your markup.
<div class="embed-responsive embed-responsive-16by9">
<youtube-video class="embed-responsive-item" video-id="theBestVideo"></youtube-video>
</div>
I took these classes from Bootstrap, so you might already have them. If not, here they are:
.embed-responsive {
position: relative;
display: block;
height: 0;
padding: 0;
overflow: hidden;
}
.embed-responsive.embed-responsive-16by9 {
padding-bottom: 56.25%;
}
.embed-responsive-item {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
Check out the demo and the code behind it.
Development
First, make sure you have the necessary dependencies installed locally and gulp installed globally
$ npm install
$ bower install
$ npm install --global gulp
To build a minfied version to dist/
$ gulp dist
To host the demo on a local server
$ gulp host
To run a couple tests
$ gulp test
And if you want to do all the aforementioned tasks
$ gulp