js面试题--红绿灯切换效果

今天这里要纪录的是一个也比较常见的面试题;

题目: 尽可能从API设计角度实现一个红绿灯效果,要求每3秒切换一次;

所谓的api设计角度,简单的理解就是通过.来调用实现。因此在这里我们初步设计实现的方式为:

ele(标签名).turn()

在实现点方法实现之前我们可以先来看下,最基本的效果代码,即只要写一个函数即可:

       var demo = document.getElementById('demo');

         (function reset(){
             setTimeout(function(){
                 demo.className = 'testgreen';
                 console.log('green');
                 setTimeout(function(){
                     demo.className = 'testred';
                     setTimeout(reset,0);
                },3000)
             },3000)
         })()

也许下面的代码并不能完全的符合题目要求,不过,这个后期可以再继续改善,现在先按照初步设计实现的方式来实现效果:

首先是很简单的一个div标签:
<div id="demo" class="turnRed">
    test
</div>
由于我们是想要通过更改class名字来实现切换,因此这里要添加上css样式:
        .testred {
            color: red;
        }

        .testgreen {
            color: green;
        }
接下来就是最重要的js代码了,这里主要是通过构造函数的方式实现
        function Test(nn) {
            this.nn = document.getElementById(nn);
        }

        Test.prototype.turn = function() {
            var demo = this.nn;

            (function turnColoe() {
                var that = this;
                setTimeout(function(namee) {
                    demo.className = 'testgreen';
                    console.log('green');
                    setTimeout(function(namee) {
                        demo.className = 'testred';
                        setTimeout(turnColoe(), 0);
                    }, 3000)
                }, 3000)
            })()
        }


        function ele(n) {
            var test = new Test(n);
            return test;
        }

        ele('demo').turn();
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值