使用 Promise 循环改变 div 背景颜色

本文通过使用HTML、CSS和JavaScript实现了一个简单的红绿灯定时切换效果,详细介绍了如何利用async/await和setTimeout来控制不同颜色灯光的显示时间,形成循环的交通信号灯效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在极客时间大牛的重学前端的《Promise 里的代码为什么比 setTimeout 先执行?》的结尾,大牛留了一道题:

我们现在要实现一个红绿灯,把一个圆形 div 按照绿色 3 秒,黄色 1 秒,红色 2 秒循环改变背景颜色,你会怎样编写这个代码呢?复制代码

我的解答如下:

<!DOCTYPE html>
<head>
    <meta charset="UTF-8"/>
    <meta name='viewport'/>
    <title>Document</title>
        #colorDiv {
            width: 50px;
            height: 50px;        
            border-radius: 100%;
        }
	</style>
</head>
<body>
    <div id="colorDiv"></div>
</body>

<script>
    let trafficLightDiv = document.getElementById('colorDiv')
    function changeTrafficLight(duration, color) {
            // 改变 div 背景颜色
            trafficLightDiv.style.backgroundColor = color
            // 延迟执行回调
            setTimeout(resolve, duration)
        })
    }
	
    async function trafficLightFun() {
        await changeTrafficLight(3000, 'green')    
        await changeTrafficLight(1000, 'yellow')
        await changeTrafficLight(2000, 'red')
        await changeTrafficLight(1000, 'yellow')
        trafficLightFun()
    }
	
    trafficLightFun()
</script>复制代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值