javascript - JS - mouseover 和 mouseout 事件不稳定

标签 javascript events

HTML

<a class="level-item like-icon">
    <div class="icon is-medium">
        <i class="far fa-heart" onmouseover="change(true)" onmouseout="change(false)"></i>
    </div>
</a>

JS

change = (state) => {
    state
        ? event.currentTarget.setAttribute('data-prefix', 'fas')
        : event.currentTarget.setAttribute('data-prefix', 'far');
};

目标:
当有人将鼠标悬停在图标上时更改图标(类,或在本例中为属性),并在用户将鼠标悬停在图标上时将其还原。上面的代码似乎有效,但有几个问题。 1) 当我将鼠标悬停在它上面时,它会触发很多次 2) 很多次,它不会将属性改回“far”(state = false)。我尝试将这些事件附加到 <a>而不是 <li>但问题仍然存在。

附注不使用 JQUERY

最佳答案

像这样的吗?

这里我添加和删除一个类hover,但ti也可以是任何属性或其他东西

window.addEventListener('mousemove', e => {
  let hovered = document.querySelector('.hover');
  if (e.target === hovered) return;
  if (hovered) { 
    console.log('mouse out from', hovered);
    hovered.classList.remove('hover');
  }
  if (!e.target.classList.contains('icon')) 
    return;
  e.target.classList.add('hover');
  console.log('mouse over on', e.target)
})
.icon {
  display: inline-block;
  width: 50px;
  height: 50px;
  transition: 100ms;
  border: solid;
  text-align: center;
  line-height: 50px;
}

.hover {
   color: red;
   border-radius: 30%;
   transform: rotate(10deg)
}
<div class="icon">1</div>
<div class="icon">2</div>
<div class="icon">3</div>
<div class="icon">4</div>
<div class="icon">5</div>
<div class="icon">6</div>
<div class="icon">7</div>

关于javascript - JS - mouseover 和 mouseout 事件不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553185/

相关文章:

c# - 用什么?委托(delegate)、事件或 Func<T>?

javascript - jQuery UI 数字微调器事件问题

javascript - Vue Threejs 在较大的 JSON 文件上帧速率较慢

javascript - Ext Js 6.2,如何在西面板触发时自动展开东面板?

javascript - 嵌套数据模型的d3更新模式

javascript - 如何从 JavaScript 执行 EventListener 'click'

javascript - 如何重置 Backbone 中的所有事件

javascript - 带背景图片的Qt Installer

javascript - 是否可以在传单中拉伸(stretch) imageOverlay?

WPF/XAML : multiple controls using the same events - is there an easier way?