[vlc-devel] [PATCH 16/17] test.html: add a html seekbar

Daniel Amm da2424 at t-online.de
Sun Jun 14 00:35:52 CEST 2015


---
 share/test/test.html | 73 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 66 insertions(+), 7 deletions(-)

diff --git a/share/test/test.html b/share/test/test.html
index 82b8ee1..bb4659b 100755
--- a/share/test/test.html
+++ b/share/test/test.html
@@ -4,6 +4,35 @@
 <title>VLC Plugin test page</title>
 
 <style type="text/css">
+#sliderBox {
+    position:relative;
+    margin:0px 4px;
+    height:10px;
+    border:1px solid #999999;
+    border-radius:4px;
+    cursor:pointer;
+}
+
+#sliderProgress {
+    position:absolute;
+    z-index:-1;
+    top:0px;
+    left:0px;
+    background-color:#3399FF;
+    width:0%;
+    height:100%;
+}
+
+.sliderButton {
+    position:absolute;
+    top:-3px;
+    right:-2px;
+    background-color:#999999;
+    height:16px;
+    width:4px;
+    border-radius:3px;
+}
+
 form {
     display:inline;
 }
@@ -179,7 +208,11 @@ function handle_MediaPlayerTimeChanged(time)
 
 function handle_MediaPlayerPositionChanged(val)
 {
-    // set javascript slider to correct position
+    if( canSeek )
+    {
+        var percent = Math.round(val*10000)/100;
+        document.getElementById("sliderProgress").style.width = percent + "%";
+    }
 }
 
 function handle_MediaPlayerSeekableChanged(val)
@@ -294,13 +327,23 @@ function close()
     </tr>
     <tr>
         <td colspan="2">
-            <table>
+            <table style="width:100%;">
                 <tr>
-                    <td style="vertical-align:top; width:550px;">
+                    <td style="vertical-align:middle; width:550px;">
                         <!--
                         Insert Slider widget
                         -->
-                        <div id="inputTrackerDiv"></div>
+                        <div id="sliderBox" onMouseLeave="if(slideState) slideState = false;" onMouseUp="if(slideState) slideState = false;">
+                            <!-- progress bar -->
+                            <div id="sliderProgress">
+                                <!-- Slider button -->
+                                <div class="sliderButton"></div>
+                            </div>
+                            <!-- Clickable seek bar -->
+                            <div style="height:100%; position:relative;"
+                                 onMouseDown="slideState = true; doSetPosition(event); if(event.preventDefault) event.preventDefault(); else return false;"
+                                 onMouseMove="if(slideState) doSetPosition(event);"></div>
+                        </div>
                     </td>
                     <td style="width:100px; text-align:center">
                         <div id="info">-:--:--/-:--:--</div>
@@ -463,6 +506,7 @@ function close()
 <script type="text/javascript">
 <!--
 
+var slideState = false;
 var telxState = false;
 var canPause = false;
 var canSeek = false;
@@ -483,9 +527,8 @@ function doSetSlider()
 {
     var vlc = getVLC("vlc");
 
-    // set slider to new position
-    if( vlc )
-        vlc.input.time = (vlc.input.length/2);
+    if( vlc && vlc.input.length != 0 )
+        vlc.input.time = vlc.input.length / 2;
 }
 
 function doGetPosition()
@@ -837,12 +880,26 @@ function doLogoOption(option, value)
     }
 }
 
+function doSetPosition(event){
+    if( !canSeek ) return; // non-seekable "live" media
+
+    var vlc = getVLC("vlc");
+    if( vlc )
+    {
+        var sliderBoxWidth = document.getElementById("sliderBox").offsetWidth - 2; // -2 for border
+        var x = event.offsetX || event.layerX || 0;
+        document.getElementById("sliderProgress").style.width = Math.round((x / (sliderBoxWidth-1) )*10000)/100 + "%"; // set slider position
+        vlc.input.position = ((x*100)/sliderBoxWidth)/100; // set media position
+    }
+}
+
 /* events */
 
 function onOpen()
 {
     document.getElementById("state").innerHTML = "Opening...";
     document.getElementById("PlayOrPause").value = "Pause";
+    document.getElementById("sliderProgress").style.width = "0%";
     setSeekable(false);
 }
 
@@ -864,6 +921,7 @@ function onEnd()
     document.getElementById("info").innerHTML = "-:--:--/-:--:--";
     document.getElementById("state").innerHTML = "End...";
     document.getElementById("PlayOrPause").value = "Play";
+    document.getElementById("sliderProgress").style.width = "0%";
     setSeekable(false);
 }
 
@@ -902,6 +960,7 @@ function onStop()
     document.getElementById("info").innerHTML = "-:--:--/-:--:--";
     document.getElementById("state").innerHTML = "Stopped...";
     document.getElementById("PlayOrPause").value = "Play";
+    document.getElementById("sliderProgress").style.width = "0%";
     setSeekable(false);
 }
 
-- 
2.1.4




More information about the vlc-devel mailing list