example4.html 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Speedtest</title>
  5. <style type="text/css">
  6. html,body{
  7. margin:0;
  8. padding:0;
  9. border:none;
  10. text-align:center;
  11. font-family: 'Open Sans';
  12. }
  13. h1,h2,h3,h4,h5,h6
  14. {
  15. font-family: 'Roboto', sans-serif;
  16. font-weight: 700;
  17. }
  18. div.meter{
  19. display:inline-block;
  20. height:300px;
  21. width:400px;
  22. text-align: center;
  23. font-size:6vw;
  24. }
  25. div#testArea
  26. {
  27. display: flex;
  28. justify-content: center;
  29. flex-flow: row wrap;
  30. }
  31. a {
  32. text-decoration: none;
  33. }
  34. .button {
  35. display: inline-block;
  36. margin: 10px 5px 0 2px;
  37. padding: 16px 40px;
  38. border-radius: 5px;
  39. font-size: 18px;
  40. border: none;
  41. background: #34aadc;
  42. color: white;
  43. cursor: pointer;
  44. text-transform: uppercase;
  45. font-weight: 700;
  46. font-family: 'Roboto';
  47. }
  48. #ip{
  49. margin:1em 0;
  50. font-size:1.2em;
  51. }
  52. </style>
  53. <script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.4/raphael-min.js"></script>
  54. <script src="https://cdnjs.cloudflare.com/ajax/libs/justgage/1.2.2/justgage.min.js"></script>
  55. <script type="text/javascript">
  56. var w=null;
  57. var ggdl,ggul,ggping;
  58. function runTest(){
  59. w=new Worker("speedtest_worker.min.js");
  60. var interval=setInterval(function(){w.postMessage("status");}.bind(this),100);
  61. document.getElementById("abortBtn").style.display="";
  62. document.getElementById("startBtn").style.display="none";
  63. w.onmessage=function(event){
  64. var data=event.data.split(";");
  65. var status=Number(data[0]);
  66. if(status>=4){
  67. clearInterval(interval);
  68. document.getElementById("abortBtn").style.display="none";
  69. document.getElementById("startBtn").style.display="";
  70. w=null;
  71. }
  72. updateGauge(ggdl, data[1]);
  73. updateGauge(ggul, data[2]);
  74. updateGauge(ggping, data[3]);
  75. document.getElementById("ip").innerHTML="Your IP: "+data[4];
  76. updateGauge(ggjitter, data[5]);
  77. }.bind(this);
  78. w.postMessage('start {"time_ul":"10", "time_dl":"10", "count_ping":"50", "url_dl":"garbage.php","url_ul":"empty.dat","url_ping":"empty.dat","url_getIp":"getIP.php"}');
  79. }
  80. function abortTest(){
  81. if(w)w.postMessage("abort");
  82. }
  83. document.addEventListener("DOMContentLoaded", function(event) {
  84. ggdl = new JustGage({
  85. id: 'ggdl',
  86. title: "Download",
  87. label: "Mbit/s",
  88. titleFontFamily : "Open Sans",
  89. valueFontFamily : "Open Sans",
  90. refreshAnimationTime: 300,
  91. value: 0,
  92. min: 0,
  93. max: 10,
  94. decimals : 2,
  95. formatNumber: true,
  96. humanFriendly : false,
  97. levelColors: [
  98. "#999999",
  99. "#339933"
  100. ]
  101. });
  102. ggul = new JustGage({
  103. id: 'ggul',
  104. title: "Upload",
  105. label: "Mbit/s",
  106. titleFontFamily : "Open Sans",
  107. valueFontFamily : "Open Sans",
  108. refreshAnimationTime: 300,
  109. value: 0,
  110. min: 0,
  111. max: 10,
  112. decimals : 2,
  113. formatNumber: true,
  114. humanFriendly : false,
  115. levelColors: [
  116. "#999999",
  117. "#333399"
  118. ]
  119. });
  120. ggping = new JustGage({
  121. id: 'ggping',
  122. title: "Ping",
  123. label: "ms",
  124. titleFontFamily : "Open Sans",
  125. valueFontFamily : "Open Sans",
  126. refreshAnimationTime: 300,
  127. value: 0,
  128. min: 0,
  129. max: 100,
  130. decimals : 2,
  131. formatNumber: true,
  132. humanFriendly : false,
  133. levelColors: [
  134. "#999999",
  135. "#993333"
  136. ]
  137. });
  138. ggjitter = new JustGage({
  139. id: 'ggjitter',
  140. title: "Jitter",
  141. label: "ms",
  142. titleFontFamily : "Open Sans",
  143. valueFontFamily : "Open Sans",
  144. refreshAnimationTime: 300,
  145. value: 0,
  146. min: 0,
  147. max: 100,
  148. decimals : 2,
  149. formatNumber: true,
  150. humanFriendly : false,
  151. levelColors: [
  152. "#999999",
  153. "#993333"
  154. ]
  155. });
  156. });
  157. function updateGauge(gauge, value)
  158. {
  159. // Alway use next power of 2 as maximum
  160. var max = Math.max(Math.pow(2, Math.ceil(Math.log2(value))), gauge.config.max);
  161. // Refresh the gauge
  162. gauge.refresh(value, max);
  163. }
  164. </script>
  165. <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,700|Roboto:400,500,700" rel="stylesheet">
  166. </head>
  167. <body>
  168. <h1>Speed Test</h1>
  169. <div id="testArea">
  170. <div class="meter" id="ggdl"></div>
  171. <div class="meter" id="ggul"></div>
  172. <div class="meter" id="ggping"></div>
  173. <div class="meter" id="ggjitter"></div>
  174. </div>
  175. <div id="ip"></div>
  176. <div>
  177. <a href="javascript:runTest()" id="startBtn" class="button">Start</a>
  178. <a href="javascript:abortTest()" id="abortBtn" class="button" style="display:none;">Abort</a>
  179. </div>
  180. <p>Fonts: <a href="https://fonts.google.com/">Google Gonts</a> | Gauges: <a href="http://justgage.com/">justgage.com</a></p>
  181. </body>
  182. </html>