{"id":236,"date":"2013-04-25T00:00:00","date_gmt":"2013-04-25T04:00:00","guid":{"rendered":"http:\/\/sproutvideo.wpengine.com\/?p=236"},"modified":"2022-10-24T18:30:55","modified_gmt":"2022-10-24T22:30:55","slug":"quick-and-dirty-custom-player-using-jquery-ui","status":"publish","type":"post","link":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html","title":{"rendered":"Quick and Dirty Custom Video Player Using jQuery UI"},"content":{"rendered":"<p>Ever wish our player had really customized controls, or a specialized design? Using our <a href=\"https:\/\/sproutvideo.com\/help\/api\/javascript_player_api\">Javascript Player API<\/a>, it\u2019s very easy to create your own unique user interface for your videos.<\/p>\n<p>Here is a quick example using JQuery UI to help demonstrate the possibilities. Before we get started, <a href=\"https:\/\/sproutvideo-examples.s3.amazonaws.com\/custom_player\/final\/index.html\">here is what we\u2019re going to build<\/a>.<\/p>\n<p><!--more--><\/p>\n<h3 id=\"step-1-set-up-the-embed-code\">Step 1: Set up the embed code<\/h3>\n<p>The first thing you\u2019ll need to do is set up your embed code so that it hides all of the SproutVideo UI around the player. To do that, open the video in question, navigate to Customizations, and use the &#8220;In-Line&#8221; option. Under &#8220;Pre-Play Settings,&#8221; check the box\u00a0&#8220;Show Controls,&#8221; and under &#8220;Visible Player Controls,&#8221; check &#8220;Hide All Controls.&#8221;<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-medium wp-image-8714\" src=\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/2022-10-24_17-23-12-700x684.jpg\" alt=\"\" width=\"700\" height=\"684\" srcset=\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/2022-10-24_17-23-12-700x684.jpg 700w, https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/2022-10-24_17-23-12-768x750.jpg 768w, https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/2022-10-24_17-23-12.jpg 1003w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>Grab your new embed code by clicking in the &#8220;Customized Embed Code&#8221; box, or using the &#8220;Copy Embed Code&#8221; button underneath it.<\/p>\n<h3 id=\"step-2-setup-our-dependencies\">Step 2: Setup our dependencies.<\/h3>\n<p>To easily interact with the SproutVideo API and create our UI, we\u2019ll use JQuery and JQuery UI. This will make building things like our progress bar far easier.<\/p>\n<p>Add the two libraries to the head of your HTML document, along with the default JQuery UI theme stylesheet. We\u2019re also going to add the excellent Font Awesome web font. This web font has tons of great icons and will make adding things like play, pause, fullscreen and volume buttons a breeze without having to create any images.<\/p>\n<p>Lastly, we need to add the SproutVideo Javascript API. Here is what our <code>&lt;head&gt;<\/code> section looks like now:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"html\"><span class=\"nt\">&lt;head&gt;<\/span>\n  <span class=\"nt\">&lt;script <\/span><span class=\"na\">type=<\/span><span class=\"s\">\"text\/javascript\"<\/span> <span class=\"na\">src=<\/span><span class=\"s\">\"https:\/\/code.jquery.com\/jquery-1.9.1.js\"<\/span><span class=\"nt\">&gt;&lt;\/script&gt;<\/span>\n  <span class=\"nt\">&lt;script <\/span><span class=\"na\">type=<\/span><span class=\"s\">\"text\/javascript\"<\/span> <span class=\"na\">src=<\/span><span class=\"s\">\"https:\/\/code.jquery.com\/ui\/1.10.2\/jquery-ui.js\"<\/span><span class=\"nt\">&gt;&lt;\/script&gt;<\/span>\n  <span class=\"nt\">&lt;link<\/span> <span class=\"na\">rel=<\/span><span class=\"s\">\"stylesheet\"<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"https:\/\/code.jquery.com\/ui\/1.10.2\/themes\/smoothness\/jquery-ui.css\"<\/span><span class=\"nt\">&gt;<\/span>\n  <span class=\"nt\">&lt;link<\/span> <span class=\"na\">rel=<\/span><span class=\"s\">\"stylesheet\"<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/3.0.2\/css\/font-awesome.min.css\"<\/span><span class=\"nt\">&gt;<\/span>\n  <span class=\"nt\">&lt;script <\/span><span class=\"na\">type=<\/span><span class=\"s\">\"text\/javascript\"<\/span> <span class=\"na\">src=<\/span><span class=\"s\">\"https:\/\/c.sproutvideo.com\/player_api.js\"<\/span><span class=\"nt\">&gt;&lt;\/script&gt;<\/span>\n<span class=\"nt\">&lt;\/head&gt;<\/span>\n<\/code><\/pre>\n<\/div>\n<h3 id=\"step-3-set-up-ui-containers\">Step 3: Set up UI containers<\/h3>\n<p>We\u2019re going to create a very basic player in this example and include the following controls:<\/p>\n<ul>\n<li>A play \/ pause button<\/li>\n<li>A progress bar that allows the viewer to seek within the video<\/li>\n<li>A volume on \/ off button<\/li>\n<li>A full screen button<\/li>\n<\/ul>\n<p>Let\u2019s set up our HTML:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"html\"><span class=\"nt\">&lt;body&gt;<\/span>\n\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"player\"<\/span><span class=\"nt\">&gt;<\/span>\n\t\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"video\"<\/span><span class=\"nt\">&gt;<\/span>\n\t\t\t<span class=\"nt\">&lt;iframe<\/span> <span class=\"na\">class=<\/span><span class=\"s\">'sproutvideo-player'<\/span> <span class=\"na\">type=<\/span><span class=\"s\">'text\/html'<\/span> <span class=\"na\">src=<\/span><span class=\"s\">'https:\/\/videos.sproutvideo.com\/embed\/709adcb31f19e5c6f8\/cd8cf2e796aa69d3?noBigPlay=true&amp;showcontrols=false'<\/span> <span class=\"na\">width=<\/span><span class=\"s\">'100%'<\/span> <span class=\"na\">height=<\/span><span class=\"s\">'100%'<\/span> <span class=\"na\">frameborder=<\/span><span class=\"s\">'0'<\/span><span class=\"nt\">&gt;&lt;\/iframe&gt;<\/span>\n\t\t<span class=\"nt\">&lt;\/div&gt;<\/span>\n\t\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"toolbar\"<\/span><span class=\"nt\">&gt;<\/span>\n\t\t\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"control play-pause\"<\/span><span class=\"nt\">&gt;&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"#\"<\/span><span class=\"nt\">&gt;&lt;i<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"icon-play\"<\/span><span class=\"nt\">&gt;&lt;\/i&gt;&lt;\/a&gt;&lt;\/div&gt;<\/span>\n\t\t\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"progress-container\"<\/span><span class=\"nt\">&gt;<\/span>\n\t\t\t\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"progress\"<\/span><span class=\"nt\">&gt;&lt;\/div&gt;<\/span>\n\t\t\t<span class=\"nt\">&lt;\/div&gt;<\/span>\n\t\t\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"control fullscreen\"<\/span><span class=\"nt\">&gt;&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"#\"<\/span><span class=\"nt\">&gt;&lt;i<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"icon-fullscreen\"<\/span><span class=\"nt\">&gt;&lt;\/i&gt;&lt;\/a&gt;&lt;\/div&gt;<\/span>\n\t\t\t<span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"control volume\"<\/span><span class=\"nt\">&gt;&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"#\"<\/span><span class=\"nt\">&gt;&lt;i<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"icon-volume-up\"<\/span><span class=\"nt\">&gt;&lt;\/i&gt;&lt;\/a&gt;&lt;\/div&gt;<\/span>\n\t\t<span class=\"nt\">&lt;\/div&gt;<\/span>\n\t<span class=\"nt\">&lt;\/div&gt;<\/span> \n<span class=\"nt\">&lt;\/body&gt;<\/span>\n<\/code><\/pre>\n<\/div>\n<p>OK, so now we\u2019ve set up all of our necessary UI elements for our player and gave them reasonable class names so we can easily access them in javascript and style them. <a href=\"https:\/\/sproutvideo-examples.s3.amazonaws.com\/custom_player\/example_1\/index.html\">Here is what it looks like now<\/a>.<\/p>\n<p>Next, lets set up our progress bar:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"javascript\"><span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.progress'<\/span><span class=\"p\">).<\/span><span class=\"nx\">slider<\/span><span class=\"p\">({<\/span>\n\t<span class=\"nx\">value<\/span><span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\n\t<span class=\"nx\">orientation<\/span><span class=\"o\">:<\/span> <span class=\"s2\">\"horizontal\"<\/span><span class=\"p\">,<\/span>\n\t<span class=\"nx\">range<\/span><span class=\"o\">:<\/span> <span class=\"s2\">\"min\"<\/span><span class=\"p\">,<\/span>\n\t<span class=\"nx\">animate<\/span><span class=\"o\">:<\/span> <span class=\"kc\">true<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<\/div>\n<p>Great. <a href=\"https:\/\/sproutvideo-examples.s3.amazonaws.com\/custom_player\/example_2\/index.html\">Now we have a progress bar<\/a> but everything looks like a mess. Let\u2019s make things a little more attractive.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"css\"><span class=\"nc\">.player<\/span> <span class=\"p\">{<\/span>\n\t<span class=\"k\">width<\/span><span class=\"o\">:<\/span> <span class=\"m\">640px<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">height<\/span><span class=\"o\">:<\/span> <span class=\"m\">403px<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">position<\/span><span class=\"o\">:<\/span> <span class=\"k\">relative<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">margin<\/span><span class=\"o\">:<\/span> <span class=\"m\">50px<\/span> <span class=\"k\">auto<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nc\">.video<\/span> <span class=\"p\">{<\/span>\n\t<span class=\"k\">position<\/span><span class=\"o\">:<\/span> <span class=\"k\">absolute<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">left<\/span><span class=\"o\">:<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">right<\/span><span class=\"o\">:<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">top<\/span><span class=\"o\">:<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">bottom<\/span><span class=\"o\">:<\/span> <span class=\"m\">43px<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nc\">.control<\/span> <span class=\"p\">{<\/span>\n\t<span class=\"k\">float<\/span><span class=\"o\">:<\/span> <span class=\"k\">left<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">padding<\/span><span class=\"o\">:<\/span> <span class=\"m\">0<\/span> <span class=\"m\">10px<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nc\">.toolbar<\/span> <span class=\"p\">{<\/span>\n\t<span class=\"k\">position<\/span><span class=\"o\">:<\/span> <span class=\"k\">absolute<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">left<\/span><span class=\"o\">:<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">right<\/span><span class=\"o\">:<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">bottom<\/span><span class=\"o\">:<\/span> <span class=\"m\">0<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">padding<\/span><span class=\"o\">:<\/span> <span class=\"m\">13px<\/span> <span class=\"m\">0<\/span> <span class=\"m\">13px<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nc\">.control<\/span> <span class=\"nt\">a<\/span> <span class=\"p\">{<\/span>\n\t<span class=\"k\">text-decoration<\/span><span class=\"o\">:<\/span> <span class=\"k\">none<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">color<\/span><span class=\"o\">:<\/span> <span class=\"m\">#000000<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nc\">.progress-container<\/span> <span class=\"p\">{<\/span>\n\t<span class=\"k\">position<\/span><span class=\"o\">:<\/span> <span class=\"k\">absolute<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">left<\/span><span class=\"o\">:<\/span> <span class=\"m\">43px<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">right<\/span><span class=\"o\">:<\/span> <span class=\"m\">79px<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">width<\/span><span class=\"o\">:<\/span> <span class=\"k\">auto<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nc\">.volume<\/span><span class=\"o\">,<\/span> <span class=\"nc\">.fullscreen<\/span> <span class=\"p\">{<\/span>\n\t<span class=\"k\">float<\/span><span class=\"o\">:<\/span> <span class=\"k\">right<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p>Now this is starting to <a href=\"https:\/\/sproutvideo-examples.s3.amazonaws.com\/custom_player\/example_3\/index.html\">look like an actual video player<\/a>. Now we just have to start hooking up the UI to the actual player.<\/p>\n<h3 id=\"step-5-hooking-up-the-ui-to-the-javascript-api\">Step 4: Hooking up the UI to the Javascript API<\/h3>\n<p>The next thing we need to do is create an instance of the SproutVideo player in our javascript and set it up to listen for the appropriate events and set up some state variable:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"javascript\"><span class=\"kd\">var<\/span> <span class=\"nx\">_duration<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_playing<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_volume<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_fullscreen<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">var<\/span> <span class=\"nx\">videoPlayer<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">SV<\/span><span class=\"p\">.<\/span><span class=\"nx\">Player<\/span><span class=\"p\">({<\/span><span class=\"nx\">videoId<\/span><span class=\"o\">:<\/span> <span class=\"s1\">'709adcb31f19e5c6f8'<\/span><span class=\"p\">});<\/span>\n\n<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">bind<\/span><span class=\"p\">(<\/span><span class=\"s1\">'ready'<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">){<\/span>\n\t<span class=\"nx\">_duration<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">duration<\/span><span class=\"p\">;<\/span>\n\t<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s2\">\".progress\"<\/span><span class=\"p\">).<\/span><span class=\"nx\">slider<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"option\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"max\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_duration<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">bind<\/span><span class=\"p\">(<\/span><span class=\"s1\">'progress'<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">){<\/span>\n\t<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.progress'<\/span><span class=\"p\">).<\/span><span class=\"nx\">slider<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"option\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"value\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">time<\/span><span class=\"p\">));<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">bind<\/span><span class=\"p\">(<\/span><span class=\"s1\">'pause'<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">){<\/span>\n\t<span class=\"nx\">_playing<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\n\t<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.play-pause i'<\/span><span class=\"p\">).<\/span><span class=\"nx\">removeClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-pause'<\/span><span class=\"p\">).<\/span><span class=\"nx\">addClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-play'<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">bind<\/span><span class=\"p\">(<\/span><span class=\"s1\">'play'<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">){<\/span>\n\t<span class=\"nx\">_playing<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\n\t<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.play-pause i'<\/span><span class=\"p\">).<\/span><span class=\"nx\">removeClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-play'<\/span><span class=\"p\">).<\/span><span class=\"nx\">addClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-pause'<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">bind<\/span><span class=\"p\">(<\/span><span class=\"s1\">'volume'<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">){<\/span>\n\t<span class=\"nx\">_volume<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">;<\/span>\n\t<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_volume<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.volume i'<\/span><span class=\"p\">).<\/span><span class=\"nx\">removeClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-volume-off'<\/span><span class=\"p\">).<\/span><span class=\"nx\">addClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-volume-up'<\/span><span class=\"p\">);<\/span>\n\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_volume<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.volume i'<\/span><span class=\"p\">).<\/span><span class=\"nx\">removeClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-volume-up'<\/span><span class=\"p\">).<\/span><span class=\"nx\">addClass<\/span><span class=\"p\">(<\/span><span class=\"s1\">'icon-volume-off'<\/span><span class=\"p\">);<\/span>\n\t<span class=\"p\">}<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<\/div>\n<p>Now our UI will properly <a href=\"https:\/\/sproutvideo-examples.s3.amazonaws.com\/custom_player\/example_4\/index.html\">respond to the events from the Javascript player API<\/a>. Try clicking on the poster frame in the example and you\u2019ll see that the progress bar updates!<\/p>\n<p>You\u2019ll notice that we set the \u201cmax\u201d value of our slider to the duration of the video that we get from the \u201cready\u201d event. This helps us get nice, smooth, updates on our progress bar once every second, and it\u2019ll make seeking that much easier as well.<\/p>\n<p>Next, we set the \u201cvalue\u201d option for our slider to the current second value from the \u201cprogress\u201d event from the API. This updates our progress bar position. We also toggle the class of our play \/ pause and volume on \/ off buttons based on the events from the API. Now it\u2019s time to make our buttons and progress bar interact with the player:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"javascript\"><span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.play-pause a'<\/span><span class=\"p\">).<\/span><span class=\"nx\">click<\/span><span class=\"p\">(<\/span><span class=\"kd\">function<\/span><span class=\"p\">(){<\/span>\n\t<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">_playing<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">play<\/span><span class=\"p\">();<\/span>\n\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">pause<\/span><span class=\"p\">();<\/span>\n\t<span class=\"p\">}<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.volume a'<\/span><span class=\"p\">).<\/span><span class=\"nx\">click<\/span><span class=\"p\">(<\/span><span class=\"kd\">function<\/span><span class=\"p\">(){<\/span>\n\t<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_volume<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"nx\">_volume<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"nx\">_volume<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n\t<span class=\"p\">}<\/span>\n\t<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">setVolume<\/span><span class=\"p\">(<\/span><span class=\"nx\">_volume<\/span><span class=\"p\">);<\/span>\n\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.fullscreen a'<\/span><span class=\"p\">).<\/span><span class=\"nx\">click<\/span><span class=\"p\">(<\/span><span class=\"kd\">function<\/span><span class=\"p\">(){<\/span>\n\t<span class=\"kd\">var<\/span> <span class=\"nx\">elem<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.player'<\/span><span class=\"p\">)[<\/span><span class=\"mi\">0<\/span><span class=\"p\">];<\/span>\n\t<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">_fullscreen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">elem<\/span><span class=\"p\">.<\/span><span class=\"nx\">requestFullscreen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t\t<span class=\"nx\">elem<\/span><span class=\"p\">.<\/span><span class=\"nx\">requestFullscreen<\/span><span class=\"p\">();<\/span>\n\t\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">elem<\/span><span class=\"p\">.<\/span><span class=\"nx\">mozRequestFullScreen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t\t<span class=\"nx\">elem<\/span><span class=\"p\">.<\/span><span class=\"nx\">mozRequestFullScreen<\/span><span class=\"p\">();<\/span>\n\t\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">elem<\/span><span class=\"p\">.<\/span><span class=\"nx\">webkitRequestFullscreen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t\t<span class=\"nx\">elem<\/span><span class=\"p\">.<\/span><span class=\"nx\">webkitRequestFullscreen<\/span><span class=\"p\">();<\/span>\n\t\t<span class=\"p\">}<\/span>\n\t\t<span class=\"nx\">_fullscreen<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\n\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">exitFullscreen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t\t<span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">exitFullscreen<\/span><span class=\"p\">();<\/span>\n\t\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">mozCancelFullScreen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t\t<span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">mozCancelFullScreen<\/span><span class=\"p\">();<\/span>\n\t\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">webkitCancelFullScreen<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t\t<span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">webkitCancelFullScreen<\/span><span class=\"p\">();<\/span>\n\t\t<span class=\"p\">}<\/span>\n\t\t<span class=\"nx\">_fullscreen<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\n\t<span class=\"p\">}<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<\/div>\n<p>As you can see above, we\u2019ve bound the click event on play\/pause button to tell our player object to play or pause the video based on the currently playback state stored in our <code>_playing<\/code> variable. Next up, we toggle the volume on and off based on the <code>_volume<\/code> state variable. Finally we handle entering and exiting fullscreen mode. Since there isn\u2019t a universal method for doing this yet, we use feature detection to use the browser specific methods and keep track of the state in our <code>_fullscreen<\/code> state variable.<\/p>\n<p>Lastly, we just need to allow dragging our progress bar to seek within the video:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"javascript\"><span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.progress'<\/span><span class=\"p\">).<\/span><span class=\"nx\">slider<\/span><span class=\"p\">({<\/span>\n\t<span class=\"nx\">value<\/span><span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\n\t<span class=\"nx\">orientation<\/span><span class=\"o\">:<\/span> <span class=\"s2\">\"horizontal\"<\/span><span class=\"p\">,<\/span>\n\t<span class=\"nx\">range<\/span><span class=\"o\">:<\/span> <span class=\"s2\">\"min\"<\/span><span class=\"p\">,<\/span>\n\t<span class=\"nx\">animate<\/span><span class=\"o\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n\t<span class=\"nx\">slide<\/span><span class=\"o\">:<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">,<\/span> <span class=\"nx\">ui<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\t\t<span class=\"nx\">videoPlayer<\/span><span class=\"p\">.<\/span><span class=\"nx\">seek<\/span><span class=\"p\">(<\/span><span class=\"nx\">ui<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">);<\/span>\n\t<span class=\"p\">}<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<\/div>\n<p>To do that, we\u2019ve just added a new <code>slide<\/code> parameter when initializing our slider. This function is called every time the user changes the value of the slider either by dragging or clicking on it. Since we set the maximum value of the slider to be the total duration of our video, each step of the slider represents one second. The ui.value parameter represents the newly selected value of the slider and that will be equivalent to the second in the video to which we\u2019d like to seek. Therefore we can directly pass that video to the <code>seek<\/code> function of our player object to seek to that second in the video.<\/p>\n<p>With that final step, we\u2019re all <a href=\"https:\/\/sproutvideo-examples.s3.amazonaws.com\/custom_player\/example_5\/index.html\">done building our quick and dirty custom video player<\/a>. After adding a few minor css touches, <a href=\"https:\/\/sproutvideo-examples.s3.amazonaws.com\/custom_player\/final\/index.html\">here is the final result<\/a>.<\/p>\n<hr \/>\n<p>While this is just a quick example, it should give you an idea of what\u2019s possible. So, get out there and start building your own custom players! If you\u2019ve built one you\u2019re proud of, or if you have any questions about using the API, let us know in the comments below!<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\"><\/span> <span class=\"rt-time\">5<\/span> <span class=\"rt-label rt-postfix\">MIN TO READ<\/span><\/span> Ever wish our player had really customized controls, or a specialized design? Using our Javascript Player API, it\u2019s very easy to create your own unique user interface for your videos. Here is a quick example using JQuery UI to help demonstrate the possibilities. Before we get started, here is what we\u2019re going to build.<\/p>\n","protected":false},"author":14,"featured_media":4430,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_eb_attr":""},"categories":[26],"tags":[],"feature":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Quick and Dirty Custom Video Player Using jQuery UI | SproutVideo<\/title>\n<meta name=\"description\" content=\"Ever wish our player had really customized controls, or a specialized design? Using our Javascript Player API, it\u2019s very easy to create your own unique\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quick and Dirty Custom Video Player Using jQuery UI | SproutVideo\" \/>\n<meta property=\"og:description\" content=\"Ever wish our player had really customized controls, or a specialized design? Using our Javascript Player API, it\u2019s very easy to create your own unique\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html\" \/>\n<meta property=\"og:site_name\" content=\"SproutVideo\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SproutVideo\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/SproutVideo\" \/>\n<meta property=\"article:published_time\" content=\"2013-04-25T04:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-24T22:30:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1320\" \/>\n\t<meta property=\"og:image:height\" content=\"740\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/sproutvideo\" \/>\n<meta name=\"twitter:site\" content=\"@SproutVideo\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adam Podolnick\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/#organization\",\"name\":\"SproutVideo\",\"url\":\"https:\/\/sproutvideo.com\/blog\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/SproutVideo\",\"https:\/\/www.instagram.com\/sproutvideo\",\"https:\/\/www.linkedin.com\/company\/sproutvideo\",\"https:\/\/www.youtube.com\/sproutvideo\",\"https:\/\/www.pinterest.com\/sproutvideo\",\"https:\/\/twitter.com\/SproutVideo\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2021\/07\/logo-mark_new.png\",\"contentUrl\":\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2021\/07\/logo-mark_new.png\",\"width\":250,\"height\":318,\"caption\":\"SproutVideo\"},\"image\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/#website\",\"url\":\"https:\/\/sproutvideo.com\/blog\/\",\"name\":\"SproutVideo\",\"description\":\"Video hosting for business\",\"publisher\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sproutvideo.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg\",\"contentUrl\":\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg\",\"width\":1320,\"height\":740},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#webpage\",\"url\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html\",\"name\":\"Quick and Dirty Custom Video Player Using jQuery UI | SproutVideo\",\"isPartOf\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#primaryimage\"},\"datePublished\":\"2013-04-25T04:00:00+00:00\",\"dateModified\":\"2022-10-24T22:30:55+00:00\",\"description\":\"Ever wish our player had really customized controls, or a specialized design? Using our Javascript Player API, it\u2019s very easy to create your own unique\",\"breadcrumb\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/sproutvideo.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quick and Dirty Custom Video Player Using jQuery UI\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#article\",\"isPartOf\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#webpage\"},\"author\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/#\/schema\/person\/fea843ff3a81aa73a8dadcb95ac57878\"},\"headline\":\"Quick and Dirty Custom Video Player Using jQuery UI\",\"datePublished\":\"2013-04-25T04:00:00+00:00\",\"dateModified\":\"2022-10-24T22:30:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#webpage\"},\"wordCount\":892,\"publisher\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#primaryimage\"},\"thumbnailUrl\":\"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg\",\"articleSection\":[\"How-Tos\"],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/#\/schema\/person\/fea843ff3a81aa73a8dadcb95ac57878\",\"name\":\"Adam Podolnick\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/sproutvideo.com\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1f1e751f9ca651c4baafa90779b900e3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1f1e751f9ca651c4baafa90779b900e3?s=96&d=mm&r=g\",\"caption\":\"Adam Podolnick\"},\"description\":\"Adam is the Founder and CEO of SproutVideo.\",\"sameAs\":[\"http:\/\/sproutvideo.wpengine.com\",\"https:\/\/www.facebook.com\/SproutVideo\",\"https:\/\/www.instagram.com\/sproutvideo\/\",\"https:\/\/www.linkedin.com\/company\/sproutvideo\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/sproutvideo\"],\"url\":\"https:\/\/sproutvideo.com\/blog\/author\/sproutvideo\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Quick and Dirty Custom Video Player Using jQuery UI | SproutVideo","description":"Ever wish our player had really customized controls, or a specialized design? Using our Javascript Player API, it\u2019s very easy to create your own unique","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html","og_locale":"en_US","og_type":"article","og_title":"Quick and Dirty Custom Video Player Using jQuery UI | SproutVideo","og_description":"Ever wish our player had really customized controls, or a specialized design? Using our Javascript Player API, it\u2019s very easy to create your own unique","og_url":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html","og_site_name":"SproutVideo","article_publisher":"https:\/\/www.facebook.com\/SproutVideo","article_author":"https:\/\/www.facebook.com\/SproutVideo","article_published_time":"2013-04-25T04:00:00+00:00","article_modified_time":"2022-10-24T22:30:55+00:00","og_image":[{"width":1320,"height":740,"url":"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/sproutvideo","twitter_site":"@SproutVideo","twitter_misc":{"Written by":"Adam Podolnick","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/sproutvideo.com\/blog\/#organization","name":"SproutVideo","url":"https:\/\/sproutvideo.com\/blog\/","sameAs":["https:\/\/www.facebook.com\/SproutVideo","https:\/\/www.instagram.com\/sproutvideo","https:\/\/www.linkedin.com\/company\/sproutvideo","https:\/\/www.youtube.com\/sproutvideo","https:\/\/www.pinterest.com\/sproutvideo","https:\/\/twitter.com\/SproutVideo"],"logo":{"@type":"ImageObject","@id":"https:\/\/sproutvideo.com\/blog\/#logo","inLanguage":"en-US","url":"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2021\/07\/logo-mark_new.png","contentUrl":"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2021\/07\/logo-mark_new.png","width":250,"height":318,"caption":"SproutVideo"},"image":{"@id":"https:\/\/sproutvideo.com\/blog\/#logo"}},{"@type":"WebSite","@id":"https:\/\/sproutvideo.com\/blog\/#website","url":"https:\/\/sproutvideo.com\/blog\/","name":"SproutVideo","description":"Video hosting for business","publisher":{"@id":"https:\/\/sproutvideo.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sproutvideo.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#primaryimage","inLanguage":"en-US","url":"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg","contentUrl":"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg","width":1320,"height":740},{"@type":"WebPage","@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#webpage","url":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html","name":"Quick and Dirty Custom Video Player Using jQuery UI | SproutVideo","isPartOf":{"@id":"https:\/\/sproutvideo.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#primaryimage"},"datePublished":"2013-04-25T04:00:00+00:00","dateModified":"2022-10-24T22:30:55+00:00","description":"Ever wish our player had really customized controls, or a specialized design? Using our Javascript Player API, it\u2019s very easy to create your own unique","breadcrumb":{"@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sproutvideo.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Quick and Dirty Custom Video Player Using jQuery UI"}]},{"@type":"Article","@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#article","isPartOf":{"@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#webpage"},"author":{"@id":"https:\/\/sproutvideo.com\/blog\/#\/schema\/person\/fea843ff3a81aa73a8dadcb95ac57878"},"headline":"Quick and Dirty Custom Video Player Using jQuery UI","datePublished":"2013-04-25T04:00:00+00:00","dateModified":"2022-10-24T22:30:55+00:00","mainEntityOfPage":{"@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#webpage"},"wordCount":892,"publisher":{"@id":"https:\/\/sproutvideo.com\/blog\/#organization"},"image":{"@id":"https:\/\/sproutvideo.com\/blog\/quick-and-dirty-custom-player-using-jquery-ui.html#primaryimage"},"thumbnailUrl":"https:\/\/d9pfvpeevxz0y.cloudfront.net\/blog\/wp-content\/uploads\/2013\/04\/Blog_042513.jpg","articleSection":["How-Tos"],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/sproutvideo.com\/blog\/#\/schema\/person\/fea843ff3a81aa73a8dadcb95ac57878","name":"Adam Podolnick","image":{"@type":"ImageObject","@id":"https:\/\/sproutvideo.com\/blog\/#personlogo","inLanguage":"en-US","url":"https:\/\/secure.gravatar.com\/avatar\/1f1e751f9ca651c4baafa90779b900e3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1f1e751f9ca651c4baafa90779b900e3?s=96&d=mm&r=g","caption":"Adam Podolnick"},"description":"Adam is the Founder and CEO of SproutVideo.","sameAs":["http:\/\/sproutvideo.wpengine.com","https:\/\/www.facebook.com\/SproutVideo","https:\/\/www.instagram.com\/sproutvideo\/","https:\/\/www.linkedin.com\/company\/sproutvideo","https:\/\/twitter.com\/https:\/\/twitter.com\/sproutvideo"],"url":"https:\/\/sproutvideo.com\/blog\/author\/sproutvideo"}]}},"acf":{"square_featured_image":false,"has_related_video_page":false},"_links":{"self":[{"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/posts\/236"}],"collection":[{"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/comments?post=236"}],"version-history":[{"count":5,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/posts\/236\/revisions"}],"predecessor-version":[{"id":8716,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/posts\/236\/revisions\/8716"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/media\/4430"}],"wp:attachment":[{"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/media?parent=236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/categories?post=236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/tags?post=236"},{"taxonomy":"feature","embeddable":true,"href":"https:\/\/sproutvideo.com\/blog\/wp-json\/wp\/v2\/feature?post=236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}