代码之家  ›  专栏  ›  技术社区  ›  jaizi jutt

背景颜色变化

  •  -2
  • jaizi jutt  · 技术社区  · 7 年前

    每当我点击页面时,我想改变标题(h1)的背景色。 这是我的代码:

    document.addEventListener('click', func);
        function func(){
            var mainHeading = document.querySelector('h1');
            var colors = ['cyan', 'black', 'brown'];
        for(let b = 0; b <= colors.length; b++){
             mainHeading.style.backgroundColor = colors[b];
        }
     } 
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   Zenoo    7 年前

    你不应该使用 for 为此循环。

    只需使用变量跟踪当前的颜色:

    let color = 0; // Variable to keep track of the color
    let colors = ['cyan', 'black', 'brown'];
    
    document.addEventListener('click', func);
    
    function func() {
      let mainHeading = document.querySelector('h1');
      color = color < colors.length - 1 ? color+1 : 0; //Increment your color or reset it
      mainHeading.style.backgroundColor = colors[color];
    }
    <h1>Test</h1>
        2
  •  1
  •   blurfus    7 年前

    您不断循环通过阵列中的所有颜色 click

    相反,您需要跟踪上次使用的颜色,并在每次活动中进行更新。

    此外,您无需在每次处理事件时声明颜色数组。您可以只声明一次(在处理程序外部)并多次使用它。

    大致如下:

    var currentColorIndex = 0;
    var colors = ['cyan', 'black', 'brown'];
    
    document.addEventListener('click', func);
    
    function func() {
      var mainHeading = document.querySelector('h1');
    
    
      // reset color
      if (currentColorIndex >= colors.length) {
        currentColorIndex = 0;
      }
    
      mainHeading.style.backgroundColor = colors[currentColorIndex];
      currentColorIndex++;
    
    }
    <h1>Title</h1>
        3
  •  0
  •   ControlAltDel    7 年前

    您需要保存颜色的状态。否则,for循环将始终将颜色设置为最后一个元素

    document.addEventListener('click', func);
        function func(){
            var colors = ['cyan', 'black', 'brown'];
            var idx = ((this.idx ? this.idx : 0) + 1) % colors.lengh;
            this.idx = idx;
            var mainHeading = document.querySelector('h1');
            mainHeading.style.backgroundColor = colors[idx];
        }
     }