promise实现超级棒的红绿灯(我不要你觉得)

今天学promise,事件轮询…叫苦不迭,这理解起来着实是需要费好大一番劲儿啊~~~

不过呢,在我的不懈努力之下,终于参破了promise一点点点的知识,赶紧做个实例练习,记录下来!

依然是思路写在注释上,上代码!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>red-green-yellow</title>
</head>
<style>
    html, body {
        width: 100%;
        height: 100%;
    }
    .container {
        width: 200px;
        height: 50px;
        border: 1px solid black;
        border-radius: 50px;
        background-color: #ccc;
        position: relative;
        top: 50%;
        left: 50%;
        transform: translateX(-50%) translateY(-50%);
    }
    #red, #green, #yellow {
        height: 20px;
        width: 20px;
        border-radius: 20px;
        border: 1px solid black;
        position: absolute;
    }
    #red {
        top: 50%;
        left: 30%;
        transform: translateY(-50%) translateX(-50%);
    }
    #green {
        top: 50%;
        left: 70%;
        transform: translateY(-50%) translateX(-50%);
    }
    #yellow {
        top: 50%;
        left: 50%;
        transform: translateY(-50%) translateX(-50%);
    }
    .white {
        background-color: #fff;
    }
    .red {
        background-color: red;
    }

    .green {
        background-color: green;
    }

    .yellow {
        background-color: yellow;
    }
</style>
<body>
<div class="container">
    <div id="red" class="white"></div>
    <div id="yellow" class="white"></div>
    <div id="green" class="white"></div>
</div>
<script>
    //red 10s  yellow 3s  green 5s  车的 人行道 秒数反过来
    //获取元素对象  我知道id可以不用写这步直接用  但是idea报浪线就是难受!而且下面还有用呢
    let red = document.getElementById('red');
    let yellow = document.getElementById('yellow');
    let green = document.getElementById('green');
    //创建promise对象的函数
    function creatPromise() {
        // s 代表 执行几秒(比如说红灯,你准备让它亮几秒)
        // e 代表哪个灯 是红灯就传red
        // color 改变颜色是通过更换类名实现的  所以这里就是代表类名
        return function (s,e,color) {
            return new Promise((resolve,reject)=>{
                // 创建 立马让它颜色亮起
                e.className=color;
                // s秒之后执行resolve 让它灭掉
                setTimeout(resolve,s);
            })
        }
    }
    //r==>red y==>yellow g==>green
    let r =creatPromise();
    let y =creatPromise();
    let g =creatPromise();
    //红绿灯循环函数  递归实现  也可以写成沙箱,立即执行
    function r_loop() {
        //创建red的promise对象 执行亮起,then代表resolve 是setTimeout的回调 s秒之后red灭掉
        //return 创建yellow的promise对象 黄灯亮起 ... 一直继续到第二次黄灯,就该递归,再红灯...形成循环了
        r(10000,red,'red').then(()=>{
            red.className='white';
            return y(3000,yellow,'yellow');
        }).then(()=>{
            yellow.className='white';
            return g(4000,green,'green');
        }).then(()=>{
            green.className='white';
            return y(3000,yellow,'yellow');
        }).then(()=>{
            yellow.className='white';
        }).then(()=>{
            r_loop();
        })
    }
    r_loop();
    //ok  完美实现 
</script>
</body>
</html>

效果图:

在这里插入图片描述

css部分没有注释,相信大家也不是为了看css进来的,肯定对其游刃有余~

好了,今日份笔记书写完毕,下次再见,路过的可以辛苦动动手留个赞~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您讲解一下如何使用 Promise 实现红绿灯的控制。 首先,我们可以定义一个 `trafficLight` 函数,该函数接受一个时间参数,表示红绿灯持续的时间。在 `trafficLight` 函数内部,我们可以使用 Promise实现红绿灯的控制。 具体的实现思路如下: 1. 使用 `Promise.resolve()` 来返回一个初始的 Promise 对象。 2. 在 Promise 对象中使用 `setTimeout()` 来控制红绿灯的变化。当红绿灯为红灯时,我们可以使用 `resolve()` 方法来切换到下一个状态;当红绿灯为绿灯时,我们可以使用 `reject()` 方法来切换到下一个状态。 3. 在 Promise 对象中使用 `then()` 方法来处理状态变化后的逻辑。当红绿灯变为绿灯时,我们可以输出 "绿灯亮起来了!";当红绿灯变为红灯时,我们可以输出 "红灯亮起来了!"。 4. 在 `trafficLight` 函数内部,我们可以使用一个循环来不断切换红绿灯的状态,直到指定的时间结束。 下面是一个示例代码: ```javascript function trafficLight(time) { let promise = Promise.resolve(); const loop = () => { promise = promise.then(() => new Promise((resolve, reject) => { console.log('红灯亮起来了!'); setTimeout(() => { console.log('绿灯亮起来了!'); reject(); }, time); })).catch(() => new Promise((resolve, reject) => { console.log('绿灯亮起来了!'); setTimeout(() => { console.log('红灯亮起来了!'); resolve(); }, time); })).then(loop); }; loop(); } trafficLight(2000); // 控制红绿灯持续时间为 2 秒 ``` 上面的代码中,我们使用了一个 `loop` 函数来不断切换红绿灯的状态。在 `loop` 函数内部,我们首先通过 `promise.then()` 方法来处理当前状态的变化,然后通过 `.catch()` 方法来处理下一个状态的变化。这样,我们就可以通过一个循环来不断控制红绿灯的变化了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值