index.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <style>
  11. .light {
  12. width: 250px;
  13. height: 250px;
  14. margin-top: 15px;
  15. border-radius: 50%;
  16. }
  17. .trafficLightWrapper {
  18. display: flex;
  19. justify-content: space-between;
  20. }
  21. #trafficLightBlock,
  22. #predestrianTrafficLightBlock {
  23. display: flex;
  24. justify-content: center;
  25. flex-wrap: wrap;
  26. width: 300px;
  27. height: fit-content;
  28. border: 1px solid black;
  29. }
  30. </style>
  31. <div class="trafficLightWrapper">
  32. <div id="trafficLightBlock">
  33. <div id="" class="light green"></div>
  34. <div id="" class="light yellow"></div>
  35. <div id="" class="light red"></div>
  36. </div>
  37. <div id="predestrianTrafficLightBlock">
  38. <div id="" class="light green"></div>
  39. <div id="" class="light red"></div>
  40. <button id="stopButton">STOP</button>
  41. </div>
  42. </div>
  43. <script>
  44. const changeLightColor = (parent, light) => {
  45. parent.querySelector(`.${light}`).style.background = light;
  46. [...parent.querySelectorAll(`.light`)]
  47. .filter((el) => !el.classList.contains(light))
  48. .map((el) => (el.style.background = "none"));
  49. };
  50. const delay = (ms) => new Promise((ok) => setTimeout(() => ok(ms), ms));
  51. //CВЕТОФОР
  52. // async function trafficLight(params = {}) {
  53. // let { element, yellow = null, red = null, green = null } = params;
  54. // while (true) {
  55. // if (green) {
  56. // changeLightColor(element, "green");
  57. // await delay(green);
  58. // }
  59. // if (yellow) {
  60. // changeLightColor(element, "yellow");
  61. // await delay(yellow);
  62. // }
  63. // if (red) {
  64. // changeLightColor(element, "red");
  65. // await delay(red);
  66. // }
  67. // if (yellow) {
  68. // changeLightColor(element, "yellow");
  69. // await delay(yellow);
  70. // }
  71. // }
  72. // }
  73. // trafficLight({
  74. // element: trafficLightBlock,
  75. // red: 3000,
  76. // yellow: 1000,
  77. // green: 3000,
  78. // });
  79. //DOMEVENTPROMISE
  80. // const domEventPromise = (element, event) => {
  81. // return new Promise((resolve, reject) => {
  82. // element.addEventListener(event, (e) => {
  83. // resolve(e);
  84. // });
  85. // });
  86. // };
  87. // domEventPromise(document, "click").then((e) => console.log("event click happens", e));
  88. //PEDESTRIANTRAFFICLIGHT
  89. // let isStopButtonReady = true;
  90. // const domEventPromise = (element, event) => {
  91. // return new Promise((resolve, reject) => {
  92. // isStopButtonReady &&
  93. // element.addEventListener(event, (e) => {
  94. // isStopButtonReady = false;
  95. // setTimeout(() => (isStopButtonReady = true), 5000);
  96. // resolve(e);
  97. // });
  98. // });
  99. // };
  100. // async function trafficLight(params = {}) {
  101. // let { element, yellow = null, red = null, green = null } = params;
  102. // while (true) {
  103. // if (green) {
  104. // changeLightColor(element, "green");
  105. // await delay(green);
  106. // }
  107. // if (yellow) {
  108. // changeLightColor(element, "yellow");
  109. // await delay(yellow);
  110. // }
  111. // if (red) {
  112. // changeLightColor(element, "red");
  113. // await Promise.race([delay(red), domEventPromise(stopButton, "click")]);
  114. // }
  115. // if (yellow) {
  116. // changeLightColor(element, "yellow");
  117. // await delay(yellow);
  118. // }
  119. // }
  120. // }
  121. // trafficLight({
  122. // element: predestrianTrafficLightBlock,
  123. // red: 3000,
  124. // green: 2000,
  125. // });
  126. //SPEEDTEST
  127. // async function speedtest(getPromise, count, parallel = 1) {
  128. // let duration = 0;
  129. // for (let i = 0; i < count; i++) {
  130. // let promises = [];
  131. // let time1 = performance.now();
  132. // for (let promiseIndex = 1; promiseIndex <= parallel; promiseIndex++) {
  133. // promises[promises.length] = getPromise();
  134. // }
  135. // await Promise.all(promises);
  136. // let time2 = performance.now();
  137. // duration += Math.floor(time2 - time1);
  138. // }
  139. // let time2 = performance.now();
  140. // let querySpeed = +(count / duration).toFixed(5);
  141. // let queryDuration = duration / parallel;
  142. // let parallelSpeed = +((count * parallel) / duration).toFixed(5);
  143. // let parallelDuration = duration / (count * parallel);
  144. // return {
  145. // duration,
  146. // querySpeed,
  147. // queryDuration,
  148. // parallelSpeed,
  149. // parallelDuration,
  150. // };
  151. // }
  152. // speedtest(() => delay(1000), 10, 10).then((result) => console.log(result));
  153. // // {duration: 10000,
  154. // // querySpeed: 0.001, //1 тысячная запроса за миллисекунду
  155. // // queryDuration: 1000, //1000 миллисекунд на один реальный запрос в среднем
  156. // // parallelSpeed: 0.01 // 100 запросов за 10000 миллисекунд
  157. // // parallelDuration: 100 // 100 запросов за 10000 миллисекунд
  158. // speedtest(() => fetch("http://swapi.dev/api/people/1").then((res) => res.json()), 10, 5).then((result) =>
  159. // console.log(result)
  160. // );
  161. </script>
  162. </body>
  163. </html>