当鼠标悬停在div上时,我如何访问div并为它们着色.它们是在一个更大的容器中创建的,当用户输入一个值时,我无法通过另一个函数访问它们.

超文本标记语言

<body>
    <div>   
        <div id="outer_container">
        <div id="container"> </div>
    </div>
    
    <div id="user_input_container">
        <input type="color" class="user_input" name="" id="colour_picker" value="#000000">

        <button class="user_input" id="rainbow">Rainbow</button>
    <div>

        <div>
            <input class="user_input" type="range" min="2" max="100" value="16" name="options"
                id="grid_range">
        </div>

</body>

JavaScript

let container = document.getElementById(`container`);
function createGrid(number) {
  totalNumber = number * number;
  while (container.hasChildNodes()) {
    container.removeChild(container.firstChild);
  }

  for (let i = 0; i < totalNumber; i++) {
    let gridSquare = document.createElement("div");
    gridSquare.classList.add("grid_square");

    let cellwidth = container.clientWidth / number + `px`;
    let cellheight = container.clientHeight / number + `px`;

    gridSquare.style.width = `${cellwidth}`;
    gridSquare.style.height = `${cellheight}`;
    container.appendChild(gridSquare);
  }
}

document.addEventListener("DOMContentLoaded", () => {
  createGrid(range.value);
});

let range = document.getElementById(`grid_range`);

range.addEventListener(`change`, () => {
  createGrid(range.value);
});

let color = document.getElementById(`colour_picker`);

我所做的只是在createdGrid()函数中添加了一个eventlistener(),它从"color" Select 器中获取值,但实际上无法访问内部的div并通过专门用于着色的外部函数对它们进行着色.

下面的eventlistener()是我在createdGrid函数的for()循环中添加的.

 gridSquare.addEventListener("mouseover", (event) => {
      event.target.style.backgroundColor = color.value;
    });

谢谢!

推荐答案

正确,如果您希望在按下彩虹按钮时将 colored颜色 更改为用户 Select 的特定 colored颜色 或将其更改为随机 colored颜色 ,则需要修改handleGridSquareMouseOver函数以判断当前模式并应用适当的 colored颜色 .

let container = document.getElementById(`container`);
let colorPicker = document.getElementById(`colour_picker`);
let rainbowButton = document.getElementById(`rainbow`);
let range = document.getElementById(`grid_range`);

let currentColorMode = 'user'; // Initial mode is user-selected color

function createGrid(number) {
  totalNumber = number * number;
  while (container.hasChildNodes()) {
    container.removeChild(container.firstChild);
  }

  for (let i = 0; i < totalNumber; i++) {
    let gridSquare = document.createElement("div");
    gridSquare.classList.add("grid_square");

    let cellwidth = container.clientWidth / number + `px`;
    let cellheight = container.clientHeight / number + `px`;

    gridSquare.style.width = `${cellwidth}`;
    gridSquare.style.height = `${cellheight}`;
    container.appendChild(gridSquare);

    // Add event listener for coloring on mouseover
    gridSquare.addEventListener("mouseover", handleGridSquareMouseOver);
  }
}

function handleGridSquareMouseOver(event) {
  if (currentColorMode === 'user') {
    // Use user-selected color
    event.target.style.backgroundColor = colorPicker.value;
  } else if (currentColorMode === 'rainbow') {
    // Use random color for the rainbow mode
    event.target.style.backgroundColor = getRandomColor();
  }
}

function getRandomColor() {
  // Function to generate a random hex color
  return `#${Math.floor(Math.random()*16777215).toString(16)}`;
}

document.addEventListener("DOMContentLoaded", () => {
  createGrid(range.value);
});

range.addEventListener(`change`, () => {
  createGrid(range.value);
});

// Event listener for the Rainbow button
rainbowButton.addEventListener('click', () => {
  // Set the current mode to rainbow
  currentColorMode = 'rainbow';
});

// You can also add an event listener for the color picker change if needed
colorPicker.addEventListener('input', () => {
  // Update the existing grid with the new color
  currentColorMode = 'user';
  updateGridColor(colorPicker.value);
});

function updateGridColor(color) {
  let gridSquares = document.getElementsByClassName("grid_square");
  for (let i = 0; i < gridSquares.length; i++) {
    gridSquares[i].style.backgroundColor = color;
  }
}

Javascript相关问答推荐

获取加载失败:获取[.]添加时try 将文档添加到Firerestore,Nuxt 3

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

在分区内迭代分区

如何判断属于多个元素的属性是否具有多个值之一

硬币兑换运行超时

格式值未保存在redux持久切片中

jQuery提交按钮重新加载页面,即使在WordPress中使用preventDefault()

数字时钟在JavaScript中不动态更新

如何解决useState错误—setSelect Image不是函数''

如何使用JavaScript拆分带空格的单词

连接到游戏的玩家不会在浏览器在线游戏中呈现

从Nextjs中的 Select 项收集值,但当单击以处理时,未发生任何情况

在HTML5画布上下文中使用putImageData时,重载解析失败

rxjs在每次迭代后更新数组的可观察值

JavaScript:多个图像错误处理程序

Plotly.js栏为x轴栏添加辅助文本

JavaScript -如何跳过某个字符(S)来打乱字符串中的字符

MUI-TABLE:MUI表组件中交替行的不同 colored颜色 不起作用

如果未定义,如何添加全局变量

如何在函数组件中保留对计时器的引用