javascript - 如何在每个鼠标悬停事件中更改单个 div 的颜色?
问题描述
我有一个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>
推荐阅读
- ruby-on-rails - Aws::S3::Errors::InvalidArgument 与 S3 和回形针
- api - 一些whatsapp自动回复应用程序如何使用我们自己的电话号码进行自动回复?我想使用 PHP 构建
- javascript - 如何用 CSS 解决 ChartJs 画布高度?
- parse-platform - 使用多个用户帐户在 Openstack 上解析服务器(替代 back4app、Heroku)
- r - 在另一个函数中使用一个函数作为输入
- javascript - 如何从稀疏数组中删除元素?
- flutter - 如何修复文本小部件填充?
- javascript - Javascript - 具有多个偏移比较的相同日期
- android - 清单合并失败:属性应用程序
- django - 如何在 Django 中编写 sql COALESCE