老师,有个问题,请看下

来源:6-1 上升到面向对象-红绿灯小案例

weixin_慕移动6442865

2020-12-04 17:34:56

请问老师,颜色改变那边,如何优化判断, 像这种如何优化呢boxs[2].classList.remove('green')??

第二个问题,我想问下像这种不是图片来改变颜色怎么样实例出100个啊?

 <style>

        .box{

            width80px;

            height200px;

            background-color:black;

            overflowhidden;

        }

        .box>.boxs{

            width70px;

            height50px;

            margin:0 auto;

            margin-top:10px;

            border:1px solid #fff;

        }

        .red{

            background-colorred;

        }

        .yellow{

            background-coloryellow;

        }

        .green{

            background-colorgreen;

        }

    </style>

</head>

<body>

    <div class="box" id='box'>

        <div class='boxs'>1</div>

        <div class='boxs'>2</div>

        <div class='boxs'>3</div>

    </div>

</body>

<script>

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

    var boxs=document.getElementsByClassName('boxs')

    function Light(){

        this.color=0

        this.init();

        this.btn();

    }

    //初始化

    Light.prototype.init=function(){

        boxs[this.color].classList.add('red')

    }

    //事件绑定

    Light.prototype.btn=function(){

        var self=this;

        box.onclick=function(){

            self.colorChange();

        }

    }

    //颜色改变

    Light.prototype.colorChange=function(){

        this.color++;

        if(this.color==3){

            this.color=0

        }

        if(this.color==0){

            boxs[this.color].classList.add('red')

            boxs[2].classList.remove('green')

        }else if(this.color==1){

            boxs[this.color].classList.add('yellow')

            boxs[0].classList.remove('red')

        }else if(this.color==2){

            boxs[this.color].classList.add('green')

            boxs[1].classList.remove('yellow')

        }

    }

    var l=new Light()

</script>


写回答

1回答

好帮手慕慕子

2020-12-04

同学你好,对于你的问题解答如下:

1、可以遍历所有的盒子,通过className设置所有的元素的类名为boxs,然后再单独给当前被点击的盒子添加特殊的类名。

http://img.mukewang.com/climg/5fca148709567a1607540600.jpg

2、与图片是差不多的实现思路,先动态创建元素,追加到页面中,然后使用while循环,多次实例化即可。

由于代码较多,老师在代码中添加了注释,同学可以结合代码注释测试理解

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .box {
      width: 80px;
      height: 200px;
      background-color: black;
      overflow: hidden;
      /* 设置左浮动 */
      float: left;
      /* 调整间距 */
      margin: 10px;
    }
    .box>.boxs {
      width: 70px;
      height: 50px;
      margin: 0 auto;
      margin-top: 10px;
      border: 1px solid #fff;
    }
    .red {
      background-color: red;
    }
    .yellow {
      background-color: yellow;
    }
    .green {
      background-color: green;
    }
  </style>
</head>
<body>
  <!-- js动态生成元素,去掉html结构即可 -->
  <!-- <div class="box" id='box'>
      <div class='boxs'>1</div>
      <div class='boxs'>2</div>
      <div class='boxs'>3</div>
    </div> -->
</body>
<script>
  // 不需要再获取了
  // var box = document.getElementById('box');
  // var boxs = document.getElementsByClassName('boxs')
  function Light() {
    this.color = 0
    this.init();
    this.btn();
  }
  //初始化
  Light.prototype.init = function () {
    // 动态创建外层盒子
    this.box = document.createElement('div');
    //添加类名
    this.box.classList.add('box')
    // 创建三个小盒子
    for (var i = 0; i < 3; i++) {
      var box = document.createElement('div');
      // 添加类名
      box.classList.add('boxs')
      // 设置小盒子的内容
      box.innerHTML = i
      // 将小盒子追加到外层盒子中
      this.box.appendChild(box)
    }
    // 将大盒子追加到页面中
    document.body.appendChild(this.box)
    // 获取每个大盒子下的所有小盒子
    this.boxs = this.box.getElementsByClassName('boxs')
    // 默认第几个显示红色
    this.boxs[this.color].classList.add('red')
  }
  //事件绑定
  Light.prototype.btn = function () {
    var self = this;
    // 通过this获取元素
    this.box.onclick = function () {
      self.colorChange();
    }
  }
  //颜色改变
  Light.prototype.colorChange = function () {
    this.color++;
    if (this.color == 3) {
      this.color = 0
    }
    //  通过this获取元素,设置所有的小盒子类名为boxs
    for (var i = 0; i < this.boxs.length; i++) {
      this.boxs[i].className = "boxs"
    }
    if (this.color == 0) {
      this.boxs[this.color].classList.add('red') //通过this获取元素
    } else if (this.color == 1) {
      this.boxs[this.color].classList.add('yellow') //通过this获取元素
    } else if (this.color == 2) {
      this.boxs[this.color].classList.add('green') //通过this获取元素
    }
  }
  // var l = new Light()
  // 实例化100个
  var count = 100;
  while (count--) {
    new Light();
  }
</script>
</body>
</html>

效果图:

http://img.mukewang.com/climg/5fca1c2e09ea5c6d19160933.jpg

祝学习愉快~

0

0 学习 · 15276 问题

查看课程