SHARE
Facebook X Pinterest WhatsApp

Create Custom Controls for your HTML5 Video Player

Feb 22, 2017

Create Custom Controls for your HTML5 Video Player

Today I thought it high time to revisit my Build an HTML5 Video Player tutorial and build upon what we created. That HTML5 player was fully functioning and incorporated quite a bit of functionality, including stop/start, pause, replay, volume, and mute actions. Since then, I received a lot of requests for a slider volume control instead of plus and minus buttons. Seeking and full screen viewing capabilities were also absent in that first incarnation. Therefore, we will be implementing those features today. As a bonus, we’re going to incorporate Access Keys as well.

New Controls

Take a look at the HTML markup below and you’ll notice a couple of new controls: the volume-bar range and the full screen button.

<div id='controls'>
        <progress id='progress-bar' min='0' max='100' value='0'>0% played</progress>
        <button id='btnReplay' class='replay' title='replay' accesskey="R" onclick='replayVideo();'>Replay</button>
        <button id='btnPlayPause' class='play' title='play' accesskey="P" onclick='playPauseVideo();'>Play</button>
        <button id='btnStop' class='stop' title='stop' accesskey="X" onclick='stopVideo();'>Stop</button>
  <input type='range' id='volume-bar' title="volume" min='0' max='1' step='0.1' value='1'>
        <button id='btnMute' class='mute' title='mute' onclick='muteVolume();'>Mute</button>       
  <button id='btnFullScreen' class='fullscreen' title='toggle full screen' accesskey="T" onclick='toggleFullScreen();'>[  ]</button>
</div>

Shortcut Keys

The accesskey attribute specifies a shortcut key to activate/focus a particular element. You can assign any key you wish, but note that the way of accessing the shortcut key varies in different browsers:

Browser Windows Linux Mac
Internet Explorer [Alt] + accesskey N/A N/A
Chrome [Alt] + accesskey [Alt] + accesskey [Control] [Alt] + accesskey
Firefox [Alt] [Shift] + accesskey [Alt] [Shift] + accesskey [Control] [Alt] + accesskey
Safari [Alt] + accesskey N/A [Control] [Alt] + accesskey
Opera Opera 15 or newer: [Alt] + accesskey
Opera 12.1 or older: [Shift] [Esc] + accesskey

Hence, on Windows Chrome, the shortcut for the Play button would be [Alt] + P.

The accesskey functionality is completely built into the browser so no coding is necessary. No additional accessibility information should be required either as the nested text for <button> elements will be read by screen readers when the button is accessed, even though we are offsetting the button text for esthetic reasons.

It should be noted that I based my shortcut keys on the American Foundation for the Blind’s Accessible Video Player. For instance, on Windows, its Quick Keys are:

  • Play/Pause (ALT-SHIFT-P)
  • Stop (ALT-SHIFT-X)
  • Forward (ALT-SHIFT-W)
  • Rewind (ALT-SHIFT-Q)
  • Full Screen (ALT-SHIFT-F-ENTER)

Setting the Volume

The video player’s volume property sets the volume within a range of 0.0 and 1.0 so all we have to do is link it to the value of the volume bar during its onchange event.

// Get a handle to the player
//the absence of the var keyword stores
//the player variable in the global (window) namespace
player = document.getElementById('video-element');

// Update the video volume
volumeBar.addEventListener("change", function(evt) {
    //the event target is the volumeBar
    player.volume = evt.target.value;
});

Toggling Full Screen Viewing

JavaScript offers the Fullscreen API for programmatically requesting full screen display from the user, and exiting full screen when desired. At this time, the full screen API’s requestFullscreen() method is still prefixed in some browsers, so you’ll have to do a bit of checking to determine which to use. There are also properties that determine whether or not the video element is currently in full screen mode or not. We can use that to toggle back to regular mode.

function toggleFullScreen() {
  if (player.requestFullscreen) {
      if (document.fullScreenElement) {
          document.cancelFullScreen();
      } else {
          player.requestFullscreen();
      }
  }
  else if (player.msRequestFullscreen) {
      if (document.msFullscreenElement) {
          document.msExitFullscreen();
      } else {
          player.msRequestFullscreen();
      }
  }
  else if (player.mozRequestFullScreen) {
      if (document.mozFullScreenElement) {
          document.mozCancelFullScreen();
      } else {
          player.mozRequestFullScreen();
      }
  }
  else if (player.webkitRequestFullscreen) {
      if (document.webkitFullscreenElement) {
          document.webkitCancelFullScreen();
      } else {
          player.webkitRequestFullscreen();
      }
  }
  else {
      alert("Fullscreen API is not supported");
      document.getElementById('btnFullScreen').disabled = true;
  }
}

Building the FullScreen Button

All of the player buttons share the same PNG graphic and position it to their icon via the CSS background-position property. Not so with the FullScreen button; it employs the square bracket characters ([ ]) to create the same button graphic as featured in the YouTube player. The distance between the brackets is achieved by inserting non-breaking spaces between them ([  ]). Those are necessary because browsers reduce all whitespace to one space character. A little CSS styling is all that’s required to make the FullScreen button appear like the other graphics:

.full screen {
    text-indent: 0px;
    color: #00c600;
    background-color: black;
    background-image: none;
    padding: 0px;
    font-weight: bold;
    padding-bottom: 3px;
}

There are no demo files to download for this tutorial. Instead, there’s a fully functioning player on Codepen.

Conclusion

Advances in HTML5, CSS3, and the introduction of new JavaScript APIs have rendered technologies like Flash obsolete. Now, even a part-time coder can create a fairly slick video player.

Recommended for you...

Best VR Game Development Platforms
Enrique Corrales
Jul 21, 2022
Best Online Courses to Learn HTML
Ronnie Payne
Jul 7, 2022
Working with HTML Images
Octavia Anghel
Jun 30, 2022
Web 3.0 and the Future Of Web Development
Rob Gravelle
Jun 23, 2022
HTML Goodies Logo

The original home of HTML tutorials. HTMLGoodies is a website dedicated to publishing tutorials that cover every aspect of being a web developer. We cover programming and web development tutorials on languages and technologies such as HTML, JavaScript, and CSS. In addition, our articles cover web frameworks like Angular and React.JS, as well as popular Content Management Systems (CMS) that include WordPress, Drupal, and Joomla. Website development platforms like Shopify, Squarespace, and Wix are also featured. Topics related to solid web design and Internet Marketing also find a home on HTMLGoodies, as we discuss UX/UI Design, Search Engine Optimization (SEO), and web dev best practices.

Property of TechnologyAdvice. © 2025 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.