123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
- // async function trafficLight(parent, redTime=4000, yellowTime=2000, greenTime=2000){
- // let container = document.createElement('div')
- // container.style.backgroundColor = 'grey'
- // container.style.width = 'fit-content'
- // container.style.padding = '5px'
- // let red = document.createElement('div')
- // let yellow = document.createElement('div')
- // let green = document.createElement('div')
- // let elems = [red, yellow, green]
-
- // for(let item of elems) {
- // item.style.backgroundColor = 'black'
- // item.style.width = '100px'
- // item.style.height = '100px'
- // item.style.borderRadius = '100%'
- // item.style.margin = '10px'
- // container.append(item)
- // }
- // parent.append(container)
- // while (true){
- // red.style.backgroundColor = 'red'
- // red.style.boxShadow = '0px 2px 10px red'
- // await delay(redTime)
- // red.style.boxShadow = 'none'
- // red.style.backgroundColor = 'black'
- // yellow.style.backgroundColor = 'yellow'
- // yellow.style.boxShadow = '0px 2px 10px yellow'
- // await delay(yellowTime)
- // yellow.style.boxShadow = 'none'
- // yellow.style.backgroundColor = 'black'
- // green.style.backgroundColor = 'lightgreen'
- // green.style.boxShadow = '0px 2px 10px lightgreen'
- // await delay(greenTime)
- // green.style.boxShadow = 'none'
- // green.style.backgroundColor = 'black'
- // }
- // }
- let div = document.createElement('div')
- document.body.append(div)
- //trafficLight(div, 5000, 3000, 2000)
- //domEventPromise
- let btn = document.createElement('button')
- btn.innerText = 'click'
- document.body.append(btn)
- function domEventPromise(elem, eventName) {
- let prom = new Promise((resolve, reject) => {
- function doAndRemove(event) {
- elem.removeEventListener(eventName, doAndRemove)
- //console.log('clicked')
- resolve(event)
- }
- elem.addEventListener(eventName, doAndRemove)
- })
- return prom
- }
- domEventPromise(btn, 'click').then( (event) => console.log('event click happens', event))
- async function pedestrianTrafficLight (parent, redTime=4000, yellowTime=2000, greenTime=2000) {
- let container = document.createElement('div')
- container.style.backgroundColor = 'grey'
- container.style.width = 'fit-content'
- container.style.padding = '5px'
- let btn = document.createElement('button')
- btn.innerText = 'pedestrian button'
- let red = document.createElement('div')
- let yellow = document.createElement('div')
- let green = document.createElement('div')
- let elems = [red, yellow, green]
-
- for(let item of elems) {
- item.style.backgroundColor = 'black'
- item.style.width = '100px'
- item.style.height = '100px'
- item.style.borderRadius = '100%'
- item.style.margin = '10px'
- container.append(item)
- }
- container.append(btn)
- parent.append(container)
- while (true){
- let buttonPresed = domEventPromise(btn, 'click')
- Promise.race([delay, buttonPresed]).then(e => console.log(e))
- red.style.backgroundColor = 'red'
- red.style.boxShadow = '0px 2px 10px red'
- await delay(redTime)
- Promise.race([delay, buttonPresed]).then(e => console.log(e))
- red.style.boxShadow = 'none'
- red.style.backgroundColor = 'black'
- yellow.style.backgroundColor = 'yellow'
- yellow.style.boxShadow = '0px 2px 10px yellow'
- Promise.race([delay, buttonPresed]).then(e => console.log(e))
- await delay(yellowTime)
- yellow.style.boxShadow = 'none'
- yellow.style.backgroundColor = 'black'
- green.style.backgroundColor = 'lightgreen'
- green.style.boxShadow = '0px 2px 10px lightgreen'
- Promise.race([delay, buttonPresed]).then(e => console.log(e))
- await delay(greenTime)
- green.style.boxShadow = 'none'
- green.style.backgroundColor = 'black'
- }
- }
- pedestrianTrafficLight(div, 3000, 3000, 3000)
|