Boostrap - Custom Video Player
Fiddle exploring how to build a video player with custom controls that uses bootstrap styling.
HTML
<h3 id="navbar"> Custom Video Player</h3>
<div id="fiddleHook" class="fiddle hidden"></div>
CSS
.fiddle {
background-color: #000000;
}
.player .header {
position: absolute;
top: 152;
text-align: center;
width: 100%;
padding: 10px;
text-align: center;
opacity: 1;
border: none;
z-index: 10;
}
#player-navbar {
background-color: #000000;
padding-left: 50px;
padding-bottom: 10px;
width: 100%;
}
.player-navbar .bs-component {
padding-top: 40px !important;
}
.player-navbar .progress {
padding-top: 38px;
}
.player video {
width: 100%;
background-color: #000000;
}
.video-control {
height: 40px;
width: 40px;
vertical-align: top;
margin-top: -3px;
/*background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);*/
border-radius: 23px;
background-color: green;
border-color: #ffffff;
color: white;
border-width: 3px;
font-weight: 100;
line-height: 40px;
/*text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);*/
font-size: 30px;
text-align: center;
/*opacity: 1; */
cursor: hand;
}
.video-control a {
color: white;
}
.video-control a .rotate {
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
}
.video-control .left {
margin-left: -20px;
}
.video-control .right {
margin-right: -40px;
}
.player .progress {
height: 20px;
margin-left: -3%;
}
.player .progress-bar {
width: 0%;
height: 100%;
background-color: #74A245;
}
.player .subTitle {
position: absolute;
top: 50%;
margin-right: 100%;
left: 25%;
width: 100%;
padding: 10px;
text-align: center;
opacity: 1;
border: none;
background-color: #333333;
z-index: 10;
}
.player .hidden {
display: none;
}
.enter-stage-right {
-moz-animation-duration: 3s;
-webkit-animation-duration: 3s;
-moz-animation-name: slidein;
-webkit-animation-name: slidein;
}
@-moz-keyframes slidein {
from {
margin-left: 100%;
}
to {
margin-left: 10%;
...
JavaScript
(function (app, $, undefined) {
var playerStreamDescriptionVisible = false;
$(document).ready(function () {
// Inject HTML structure
$('#fiddleHook').html(app.store.html);
// Wait a second, and then add event plumbing
setTimeout(app.onAfterRender, 1000);
});
// Data Store
app.store = {
// Static "on-board" json.
data: [{
"id": "1",
"name": "War on Drugs continues",
"description": "Losses continue in agressive raid on local property",
"content-url": "http://buffalogrove.sat.iit.edu/Kitty.mp4",
"thumb-url": ""
}],
// This is static html necessary to draw video player and controls
html: '<div class="player"><div id="playerStreamDescription" class="player subTitle hidden"></div><div id="playerStreamName" class="header hidden"></div><video id="playerStream" ></video><div id="player-navbar" class="collapse navbar-collapse"><ul class="nav navbar-nav" style="margin-left: 5%;"><li><div id="playerStartButton" onclick="app.playerStreamPlay();" class="video-control left" href="#" title="play"><a href="#">></a></div><div id="playerPauseButton" onclick="app.playerStreamPause();" class="video-control hidden" href="#" title="play"><a class="rotate" href="#">=</a></div></li><li><div class="span8" style="margin-right: -3%;"><div class="bs-component"><div class="progress" style="height: 36px; width=150px; margin-left: -3%; margin-right: 3%;"><div id="playerProgressBar" class="progress-bar"style="width: 0%; height: 100%; background-color: #74A245;"></div></div></div></div></li><li><div id="playerFullScreenButton" href="#" onclick="app.playerStreamMaximize();" class="video-control right" ><a href="#">+</a></a></li></ul><!--/.nav-collapse --></div><!-- /.player-navbar --></div>'
};
// Add Input Event handlers
app.onAfterRender = function () {
app.playerLoadVideo(app.store.data[0]);
...