瀏覽代碼

HW YB2NKR8B2LL done

Varvara Huza 3 年之前
父節點
當前提交
3c968eeca1
共有 2 個文件被更改,包括 197 次插入0 次删除
  1. 47 0
      Homework_15/index.html
  2. 150 0
      Homework_15/main.js

+ 47 - 0
Homework_15/index.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <style>
+        body{
+            background-color: #000;
+            color: #fff;
+        }
+
+        div {
+            vertical-align: middle;
+        }
+
+        button {
+            margin: 15px; 
+        }
+
+        .traffic-light {
+            border-radius: 50%;
+            width: 200px;
+            height: 200px;
+            margin: 15px;
+            display: inline-block;
+        }
+
+    </style>
+    <script src="main.js" defer></script>
+</head>
+<body>
+    <div>
+        <div class="traffic-light" id="trafficLightContainer"></div>
+        <span>&lt;= это светофор для машин и суицидников</span>
+    </div>
+    <div>
+        <div class="traffic-light" id="pedestrianTrafficLightContainer"></div>
+        <span>&lt;= это светофор для обычных пешеходов</span>
+    </div>
+    <div>
+        <button id="btn">Я кнопка</button>
+        <span>&lt;= это для тех, кто спешит</span>
+    </div>    
+</body>
+</html>

+ 150 - 0
Homework_15/main.js

@@ -0,0 +1,150 @@
+//svetofor 
+const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
+
+async function trafficLight(element, timeGreen, timeYellow, timeRed){
+    while (true){
+        element.style.backgroundColor = 'green'
+        await delay(timeGreen)
+        element.style.backgroundColor = 'yellow'
+        await delay(timeYellow)
+        element.style.backgroundColor = 'red'
+        await delay(timeRed)
+    }
+}
+
+//domEventPromise
+function domEventPromise(element, eventName) {
+    return new Promise((resolve) => {
+        element.addEventListener(eventName, function toDelete (e) {
+            element.removeEventListener(eventName, toDelete)
+            resolve(e)
+        })
+    })
+}
+
+//PedestrianTrafficLight
+function changeColor(element, color) {
+    element.style.backgroundColor = color
+}
+
+async function pedestrianTrafficLight(element, element2, timeGreen, timeYellow, timeRed) {
+    while(true) {
+        delay(timeGreen / 3).then(() => btn.disabled = false)
+        changeColor(element, 'green')
+        changeColor(element2, 'red')
+        await Promise.race([delay(timeGreen), domEventPromise(btn, 'click')])
+
+        btn.disabled = true
+        changeColor(element, 'yellow')
+        await delay(timeYellow)
+
+        changeColor(element, 'red')
+        changeColor(element2, 'green')
+        await delay(timeRed)
+
+        changeColor(element, 'yellow')
+        changeColor(element2, 'red')
+        await delay(timeYellow)
+    }
+}
+
+pedestrianTrafficLight(trafficLightContainer, pedestrianTrafficLightContainer, 10000, 3000, 15000)
+
+//speedtest
+async function speedtest(getPromise, count, parallel=1){
+    let startTime = performance.now()
+    
+    for (let i = 0; i < count; i++) {
+        let promises = []
+        for (let j = 0; j < parallel; j++) {
+            promises.push(getPromise())
+        }
+        await Promise.all(promises)
+    }
+
+    let duration = performance.now() - startTime
+    let querySpeed = count / duration
+    let queryDuration = duration / count
+    let parallelSpeed = (count * parallel) / duration
+    let parallelDuration = duration / (count * parallel)
+
+        return {
+            duration,
+            querySpeed,
+            queryDuration, 
+            parallelSpeed,
+            parallelDuration
+        }
+    }
+
+speedtest(() => delay(1000), 10, 10 ).then(result => console.log(result))
+speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 3, 1).then(result => console.log(result))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// async function newTrafficLight(element, timeGreen, timeYellow, timeRed) {
+//     async function trafficLightImproved(){
+//         while (a){
+//             element.style.backgroundColor = 'green'
+//             if (!a) break
+//             await delay(timeGreen)
+//             element.style.backgroundColor = 'yellow'
+//             if (!a) break
+//             await delay(timeYellow)
+//             element.style.backgroundColor = 'red'
+//             if (!a) break
+//             await delay(timeRed)
+//         }
+//     }
+
+//     let a = true;
+
+//     // btn.onclick = async () => {
+//     //     a = false;
+//     //     await delay(3000)
+//     //     a = true;
+//     //     trafficLightImproved()
+//     // }
+
+//     trafficLightImproved()
+//     while (true) {
+//         await domEventPromise(btn, 'click').then(e => console.log('event click happens', e))
+//         .then(async () => {
+//             a = false
+//             await delay(1000)
+//             a = true
+//             trafficLightImproved()
+//         })
+//         await delay(5000)
+//     }
+// }
+
+// newTrafficLight(document.body, 5000, 2000, 5000)
+
+