javascript - 如何在每次鼠标悬停事件时更改单个 div 的颜色?

标签 javascript html css

我有一个 div 网格。我希望每个 div 在每次鼠标悬停时逐渐将颜色从灰色变为黑色 - 具体来说,我希望在第 10 次鼠标悬停事件时框变为黑色。我已经到了一半了。就目前情况而言,我有一个实现此颜色渐变的函数,但是在单个框变为黑色后,我将鼠标悬停的所有其他框也都是黑色的。如何使每个框以相同的灰色阴影开始?我打赌我可以通过一系列很长的 if 语句来实现这一点,但我想知道是否有更简洁的解决方案。

const bigContainer = document.querySelector('.bigContainer')

window.onload = function initializeGrid() {
    for(let i = 0; i < 16; i++) {
        bigContainer.innerHTML+='<div class="row">';

        for(let j = 0; j < 16; j++) {
            bigContainer.innerHTML+='<div class="smallBox">';
        }
    }
}

let rbgPercentValue = 90;

bigContainer.addEventListener('mouseover', event => {
    let target = event.target
    let rgbColor = `rgb(${rbgPercentValue}%,${rbgPercentValue}%,${rbgPercentValue}%)`

    if (target !== bigContainer) {
      target.style['background'] = rgbColor;
      rbgPercentValue -= 10;
    }

})
.smallBox {
    border: 1px solid black;
    width: 40px;
    height: 40px;
    display: inline-block;
}
.row {
    margin-bottom: -5px; 
}
.bigContainer {
    text-align: center;
}
<div class="bigContainer"></div>

最佳答案

使用标题的演示(百分比也可见)。

const bigContainer = document.querySelector('.bigContainer')

window.onload = function initializeGrid() {
    for(let i = 0; i < 16; i++) {
        bigContainer.innerHTML+='<div class="row">';

        for(let j = 0; j < 16; j++) {
            bigContainer.innerHTML+='<div class="smallBox">';
        }
    }
}

bigContainer.addEventListener('mouseover', event => {
let target = event.target
let rbgPercentValue = parseInt(target.dataset.percent);
if (isNaN(rbgPercentValue)) rbgPercentValue = 100;
if (rbgPercentValue >= 10) {
    rbgPercentValue -= 10;
    target.dataset.percent = rbgPercentValue;
}
    let rgbColor = `rgb(${rbgPercentValue}%,${rbgPercentValue}%,${rbgPercentValue}%)`

    if (target !== bigContainer) {
        target.style['background'] = rgbColor;
    }

})
.smallBox {
    border: 1px solid black;
    width: 40px;
    height: 40px;
    display: inline-block;
}
.row {
    margin-bottom: -5px;
}
.bigContainer {
    text-align: center;
}
<div class="bigContainer"></div>

关于javascript - 如何在每次鼠标悬停事件时更改单个 div 的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60817867/

相关文章:

javascript - 从 3.0 之前的 servlet 的 FormData api 检索请求参数,其中不支持 request.part

javascript - 在 JavaScript 中仅替换 "functor"

javascript - 使用 jQuery/Javascript 处理 HTML 元素组?

jquery - 如何在创建数组之前创建随机选项

javascript - 如何映射两个不同长度的数组? (Javascript)

php - 如何显示多个 SQL 数据库行的内容

javascript - 如何使用 Objective-C 解析需要 JavaScript 的 HTML

html - Bootstrap : Make columns stack horizontally in row

javascript - 在多个之间突出显示一个 jQuery Radio Set

html - 使 div 的宽度为其内容宽度的两倍