You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复鼠标在父div内移过子元素时背景频繁随机变色的问题

解决鼠标在父div内子元素移动时背景色持续变化的问题

问题出在你使用的mouseover事件上——这个事件会触发冒泡机制。当鼠标在父元素内部的子元素(比如img、input、按钮等)之间移动时,子元素的mouseover事件会向上冒泡到父元素,导致父元素的颜色切换函数反复执行,背景色就会持续随机变化。

修复方法很简单,把mouseover替换成mouseenter事件即可。mouseenter不会触发冒泡,只有当鼠标从元素外部首次进入父元素区域时才会触发一次,在父元素内部的子元素之间移动时不会重复触发事件。

修改后的完整代码如下:

<div class="card-border" id="triangleColorChange">
  <img src="images/triangle.png" alt="...">
  <div>
    <h5>Triangle</h5>
    <h6>Area(A)= .5 x b x h </h6>
    <input type="text" placeholder="b" id="triangleB"><span> cm</span>
    <input type="text" placeholder="h" id="triangleH"><span> cm</span>
    <br><br>
    <button id="trianglrBtn">Calculate</button>
  </div>
</div>

<script>
  function getRandomColor() {
    const letters = '0123456789abcdefABCDEF';
    let color = '#';
    for (let i = 0; i < 6; i++) {
      color = color + letters[Math.floor(Math.random() * 22)];
    }
    return color;
  }
  
  // 替换mouseover为mouseenter
  document.getElementById('triangleColorChange').addEventListener('mouseenter', function() {
    const triangleArea = document.getElementById('triangleColorChange');
    triangleArea.style.backgroundColor = getRandomColor();
  })
  
  document.getElementById('triangleColorChange').addEventListener('mouseleave', function() {
    const triangleArea = document.getElementById('triangleColorChange');
    triangleArea.style.backgroundColor = 'white';
  })
</script>

另外可以优化代码里的DOM查询,提前缓存元素避免重复查询,代码会更简洁高效:

// 提前缓存元素
const triangleArea = document.getElementById('triangleColorChange');

triangleArea.addEventListener('mouseenter', function() {
  this.style.backgroundColor = getRandomColor();
})

triangleArea.addEventListener('mouseleave', function() {
  this.style.backgroundColor = 'white';
})

内容的提问来源于stack exchange,提问作者Adiba Mubasshirah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:45:39