问题
如何实现一个页面中红绿灯的效果:一个div,依次呈现红灯3s,绿灯2s,黄灯1s,不间断的交替。
多种方案实现
结构:
1 | <div class="lantern css">css</div> |
样式:
1 | .lantern { |
关键: 阶跃函数
setTimeout
结构:
1 | <div class="lantern jst">js-timeout</div> |
js:
1 | /* common start */ |
promise
结构:
1 | <div class="lantern jsp">js-promise</div> |
js:
1 | /* promise */ |
generator
结构:
1 | <div class="lantern jsg">js-generator</div> |
js:
1 | /* generator start */ |
async await
结构:
1 | <div class="lantern jsa">js-async</div> |
1 | /* async await start*/ |
See the Pen
lantern by Iona (@lozoe)
on CodePen.
思考
尽可能从API设计角度实现一个红绿灯效果,红灯3s, 黄灯2s,绿灯1s;
所谓的api设计角度,简单的理解就是通过.来调用实现。因此在这里我们初步设计实现的方式为:
1 | ele(标签名).turn() |
在实现点方法实现之前我们可以先来看下,最基本的效果代码,即只要写一个函数即可:
1 | <div id="lantern" class="lantern"></div> |
1 | #lantern { |
1 | let lantern = document.querySelector('.lantern'); |
See the Pen
lantern-api by Iona (@lozoe)
on CodePen.