javascript - 使用 eventListener 更改 bool 值

标签 javascript

我正在尝试创建一个 eclipse 刻草图项目。我有一个函数,如果“黑色变量”为真,则将方 block 涂成黑色。此外,我还有另一个功能(它是点击效果功能上的按钮),它能够将“黑色变量”变成假值并用随机生成的颜色绘制方 block 。但是,我无法创建一个将“黑色变量”变为 true 的按钮。即使tileRainbow 函数有效,BlackButton 函数也不起作用。只有最后一个功能不起作用。

我尝试更改函数,更改函数的顺序。

const tiles = document.getElementsByClassName("newDiv")
let black = true
//paint squares black on mouseover effect if black is true
function tileBlack() {
    if (black == true) {
        for (tile of tiles) {
            tile.addEventListener("mouseover", function (event) {
                event.target.style.backgroundColor = "black";
            })
        }
    }
}
//make rainbow button capable of changing black variable to false. if it is false paint squares with random generated colours.
function rainbowTile() {
    black = false;
    const rainbow = document.querySelector("#rainbow")
    rainbow.addEventListener('click', event => {
        if (black !== true) {
            for (tile of tiles) {

                let randomnum = Math.floor(Math.random() * 255)
                let randomnum2 = Math.floor(Math.random() * 255)
                let randomnum3 = Math.floor(Math.random() * 255)
                tile.addEventListener("mouseover", function (event) {
                    event.target.style.backgroundColor = `rgb(${randomnum}, ${randomnum2}, ${randomnum3})`;
                })
            }
        }
    })
}

//make black button capable of changing black variable to true so tileBlack function activates.
function blackButton() {
    const paintitblack = document.querySelector("#black")
    paintitblack.addEventListener('click', event => {
        black = true;
    })
}

我在控制台上没有收到任何错误。但是,我的代码不起作用。

最佳答案

调用 addEventListener() 时不应测试该变量。如果您同时调用 tileBlack()rainbowTile(),则图 block 将同时具有两个事件监听器。

相反,您应该添加一个事件监听器一次,并且它应该在运行时检查变量。

Array.from(tiles).forEach(tile => tile.addEventListener("mouseover", event => {
  if (black) {
    event.target.style.backgroundColor = "black";
  } else {
    let randomnum = Math.floor(Math.random() * 255)
    let randomnum2 = Math.floor(Math.random() * 255)
    let randomnum3 = Math.floor(Math.random() * 255)
    tile.addEventListener("mouseover", function(event) {
      event.target.style.backgroundColor = `rgb(${randomnum}, ${randomnum2}, ${randomnum3})`;
    })
  }
}););

关于javascript - 使用 eventListener 更改 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977883/

相关文章:

javascript - 检查表格单元格 block 是否有数据,如果有则更改样式

javascript - div内溢出span的宽度,IE9

javascript - 参数后缺少 ) 但仅适用于长字符串

javascript - 如何在 JavaScript (ES6) 中测试基于生成器的流控制?

javascript - jQuery如何仅删除某些元素的类

javascript - 动态创建指令 angularjs 并从新指令获取变量输入

javascript - 在 javascript/jquery 中读取文件

javascript - 网页上的直播 channel 流

javascript - 具有动态功能的 Ramda 管道

javascript - 在javascript中将数据添加到本地数组