example6.html 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="referrer" content="no-referrer" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no" />
  7. <title>Speedtest</title>
  8. <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet" />
  9. <style type="text/css">
  10. .st-block {
  11. text-align: center;
  12. }
  13. .st-btn {
  14. margin-top: -0.5rem;
  15. margin-left: 1.5rem;
  16. }
  17. .st-value>span:empty::before {
  18. content: "0.00";
  19. color: #636c72;
  20. }
  21. #st-ip:empty::before {
  22. content: "___.___.___.___";
  23. color: #636c72;
  24. }
  25. </style>
  26. </head>
  27. <body class="my-4">
  28. <div class="container">
  29. <div class="row">
  30. <div class="col-sm-12 mb-3">
  31. <p class="h1">
  32. Speedtest
  33. <button id="st-start" class="btn btn-outline-primary st-btn" onclick="startTest()">Start</button>
  34. <button id="st-stop" class="btn btn-danger st-btn" onclick="stopTest()" hidden="true">Stop</button>
  35. </p>
  36. <p class="lead">
  37. Your IP: <span id="st-ip"></span>
  38. </p>
  39. </div>
  40. <div class="col-lg-3 col-md-6 mb-3 st-block">
  41. <h3>Download</h3>
  42. <p class="display-4 st-value"><span id="st-download"></span></p>
  43. <p class="lead">Mbit/s</p>
  44. </div>
  45. <div class="col-lg-3 col-md-6 mb-3 st-block">
  46. <h3>Upload</h3>
  47. <p class="display-4 st-value"><span id="st-upload"></span></p>
  48. <p class="lead">Mbit/s</p>
  49. </div>
  50. <div class="col-lg-3 col-md-6 mb-3 st-block">
  51. <h3>Ping</h3>
  52. <p class="display-4 st-value"><span id="st-ping"></span></p>
  53. <p class="lead">ms</p>
  54. </div>
  55. <div class="col-lg-3 col-md-6 mb-3 st-block">
  56. <h3>Jitter</h3>
  57. <p class="display-4 st-value"><span id="st-jitter"></span></p>
  58. <p class="lead">ms</p>
  59. </div>
  60. </div>
  61. </div>
  62. <script type="text/javascript">
  63. var worker = null
  64. function startTest() {
  65. document.getElementById('st-start').hidden = true
  66. document.getElementById('st-stop').hidden = false
  67. worker = new Worker('speedtest_worker.min.js')
  68. var interval = setInterval(function () { worker.postMessage('status') }, 100)
  69. worker.onmessage = function (event) {
  70. var download = document.getElementById('st-download')
  71. var upload = document.getElementById('st-upload')
  72. var ping = document.getElementById('st-ping')
  73. var jitter = document.getElementById('st-jitter')
  74. var ip = document.getElementById('st-ip')
  75. var data = event.data.split(';')
  76. var status = Number(data[0])
  77. if (status >= 4) {
  78. clearInterval(interval)
  79. document.getElementById('st-start').hidden = false
  80. document.getElementById('st-stop').hidden = true
  81. w = null
  82. }
  83. if (status === 5) {
  84. // speedtest cancelled, clear output data
  85. data = []
  86. }
  87. download.textContent = (status==1&&data[1]==0)?"Starting":data[1]
  88. upload.textContent = (status==3&&data[2]==0)?"Starting":data[2]
  89. ping.textContent = data[3]
  90. ip.textContent = data[4]
  91. jitter.textContent = data[5]
  92. }
  93. worker.postMessage('start')
  94. }
  95. function stopTest() {
  96. if (worker) worker.postMessage('abort')
  97. }
  98. </script>
  99. </body>
  100. </html>