Als erstes kann man natürlich fragen, warum sollte man einen eigenen HTML5 Video Player verwenden wollen – und dann auch noch ohne Controls – aber mit eigenem Play-Overlay? Am einfachsten wäre es doch sicherlich, ein Video per Vimeo oder YouTube in eine Webseite einzubinden. Man kopiert einfach den embed-Code und fertig ist die Hütte. Aber wie das aussieht? Naja – meistens eben so, wie sich die Damen und Herren von Vimeo und YouTube vorstellen – und diese Vorstellung kann schon mal von den eigenen Vorstellungen abweichen.
In diesem Beispiel beschränken wir uns dabei allerdings zunächst mal auf das Weglassen der Bedienelemente (Controls – z.B. Play-Button, Ladebalken, Lautstärke, Fullscreen-Button etc.) und wollen stattdessen nur einen Play-Button bzw. von der Funktion her einen Play-Pause-Button als Overlay über das Startbild legen. Und das ist gar nicht mal so schwierig, wie die Einleitung vielleicht vermuten läßt. Los geht’s.
Eigener Play-Pause-Button für HTML5 Video Player
Zunächst bauen wir uns mal den HTML5 Video Player ein – also den Code, der dafür sorgt, dass der HTML5 Video Player angezeigt wird, der vom jeweiligen Browser angeboten wird, wenn er das HTML5 Video Tag interpretiert. Damit haben wir dann bereis einen voll funktionsfähigen Video Player, der per CSS auch ein responsiver Player sein kann. Allerdings werden zunächst entweder gar keine Bedienelemente angezeigt, oder alle – je nachdem, ob das Attribut „controls“ gesetzt ist, oder nicht – und diese Controls sind dann natürlich im Design des jeweiligen Browsers. Hier exemplarisch das HTML5 Video Tag mit kurzer Erklärung:
<video autobuffer controls> <source src="/files/video.mp4" type="video/mp4" > </video>
Das erste Attribut „autobuffer“ sorgt dafür, dass das Video geladen wird, sobald es zu sehen ist – und nicht erst dann, wenn es vollständig geladen ist. Der zweite Parameter „controls“ sorgt dafür, dass die Standard-Bedienelemente für Play, Pause, Zeitleiste etc. angezeigt werden. Wer zudem noch möchte, dass das Video automatisch anfängt zu spielen, kann noch das Attrivut autoplay="autoplay"
hinzufügen.
Um nun die Standard-Controls nun gegen einen Play-Pause-Overlay auszutauschen, geht man am besten wie folgt vor: Das HTML5 Video Tag muss zunächst in einen Container umziehen, der dann das Overlay für die Play-Pause-Funktion beinhaltet. Dann verstecken wir die Standard-Video-Controls per JavaScript bzw. jQuery und regeln die Play- und Pause-Funktionen ebenfalls über Javascript. So können auch Nutzer, die kein JavaScript aktivert haben, den Player weiterhin problemlos über die Standard-Controls bedienen. Das klingt jetzt vielleicht erstmal ein bisschen kompliziert, ist aber gar nicht so wild – und sieht der Player so aus, wie er soll. Der Aufwand lohnt sich. Los geht’s:
Hier erstmal das HTML:
<div class="video_wrapper"> <video autobuffer controls> <source src="/files/video.mp4" type="video/mp4" > </video> <div class="playpause"></div> </div>
Und hier der dazu passende JavaScript-bzw. jQuery-Code, der die Play-Pause-Funktion regelt und die Standard-Bedienelemente versteckt:
<script> jQuery('.video').parent().click(function () { if(jQuery(this).children(".video").get(0).paused){ jQuery(this).children(".video").get(0).play(); jQuery(this).children(".playpause").fadeOut(); }else{ jQuery(this).children(".video").get(0).pause(); jQuery(this).children(".playpause").fadeIn(); } }); var vids = jQuery("video"); jQuery.each(vids, function(){ this.controls = false; }); </script>
Nun fehlt nur noch das CSS, das unser Play-Pause-Bild als Overlay auf den Player zaubert:
.video { width: 100%; height: auto; border: none; } .video_wrapper{ display:table; width:auto; position:relative; width:100%; cursor:pointer; } .playpause { background-image:url(img/play-icon.png); background-repeat:no-repeat; width:35%; height:35%; position:absolute; left:0%; right:0%; top:0%; bottom:0%; margin:auto; background-size:contain; background-position: center; }
Auf iOS Geräten (iPhone, iPad) wird automatisch ein Play-Overlay angezeigt, das das Design unseres Play-Overlay natürlich stören würde. Zu guter letzt also noch ein CSS-Schnippsel, der verhindert, dass das iOS-Player-Overlay angezeigt wird:
video::-webkit-media-controls-start-playback-button { display: none; }
Das war’s. Viel Spaß damit!