example3.html 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Speedtest</title>
  5. <style type="text/css">
  6. html,
  7. body {
  8. margin: 0;
  9. padding: 0;
  10. border: none;
  11. text-align: center;
  12. }
  13. div.test {
  14. display: inline-block;
  15. margin: 1em;
  16. font-size: 2vw;
  17. min-width: 20vw;
  18. text-align: center;
  19. }
  20. div.testName,
  21. div.meterUnit {
  22. font-size: 1em;
  23. }
  24. div.meter {
  25. font-size: 1.5em;
  26. line-height: 1.5em;
  27. height: 2em !important;
  28. }
  29. .flash {
  30. animation: flash 0.6s linear infinite;
  31. }
  32. @keyframes flash {
  33. 0% { opacity: 0.6; }
  34. 50% { opacity: 1; }
  35. }
  36. a {
  37. display: inline-block;
  38. border: 0.15em solid #000000;
  39. padding: 0.3em 0.5em;
  40. margin: 0.6em;
  41. color: #000000;
  42. text-decoration: none;
  43. }
  44. #ip {
  45. margin: 0.8em 0;
  46. font-size: 1.2em;
  47. }
  48. @media all and (max-width: 50em) {
  49. div.test {
  50. font-size: 2em;
  51. }
  52. }
  53. </style>
  54. <script type="text/javascript">
  55. var w = null
  56. function runTest() {
  57. document.getElementById('startBtn').style.display = 'none'
  58. document.getElementById('testArea').style.display = ''
  59. document.getElementById('abortBtn').style.display = ''
  60. w = new Worker('speedtest_worker.min.js')
  61. var interval = setInterval(function () { w.postMessage('status') }, 100)
  62. w.onmessage = function (event) {
  63. var data = event.data.split(';')
  64. var status = Number(data[0])
  65. var dl = document.getElementById('download')
  66. var ul = document.getElementById('upload')
  67. var ping = document.getElementById('ping')
  68. var ip = document.getElementById('ip')
  69. var jitter = document.getElementById('jitter')
  70. dl.className = status === 1 ? 'flash' : ''
  71. ping.className = status === 2 ? 'flash' : ''
  72. jitter.className = ul.className = status === 3 ? 'flash' : ''
  73. if (status >= 4) {
  74. clearInterval(interval)
  75. document.getElementById('abortBtn').style.display = 'none'
  76. document.getElementById('startBtn').style.display = ''
  77. w = null
  78. }
  79. if (status === 5) {
  80. document.getElementById('testArea').style.display = 'none'
  81. }
  82. dl.textContent = data[1]
  83. ul.textContent = data[2]
  84. ping.textContent = data[3]
  85. jitter.textContent = data[5]
  86. ip.textContent = data[4]
  87. }
  88. w.postMessage('start')
  89. }
  90. function abortTest() {
  91. if (w) w.postMessage('abort')
  92. }
  93. </script>
  94. </head>
  95. <body>
  96. <h1>Speedtest</h1>
  97. <div id="testArea" style="display:none">
  98. <div id="ip">Please wait...</div>
  99. <div class="test">
  100. <div class="testName">Download</div>
  101. <div class="meter">&nbsp;<span id="download"></span>&nbsp;</div>
  102. <div class="meterUnit">Mbit/s</div>
  103. </div>
  104. <div class="test">
  105. <div class="testName">Upload</div>
  106. <div class="meter">&nbsp;<span id="upload"></span>&nbsp;</div>
  107. <div class="meterUnit">Mbit/s</div>
  108. </div>
  109. <div class="test">
  110. <div class="testName">Latency</div>
  111. <div class="meter">&nbsp;<span id="ping"></span>&nbsp;</div>
  112. <div class="meterUnit">ms</div>
  113. </div>
  114. <div class="test">
  115. <div class="testName">Jitter</div>
  116. <div class="meter">&nbsp;<span id="jitter"></span>&nbsp;</div>
  117. <div class="meterUnit">ms</div>
  118. </div>
  119. <br/>
  120. <a href="javascript:abortTest()" id="abortBtn">Abort</a>
  121. </div>
  122. <a href="javascript:runTest()" id="startBtn">Run speedtest</a>
  123. </body>
  124. </html>