【发布时间】:2018-07-19 04:56:26
【问题描述】:
我在相同的元素上有一个mouseover 和mouseleave 事件监听器,当您mouseover 它添加一个类而mouseleave 删除该类。
我正在运行forEach,因此当您mouseover 特定项目时,它会显示该项目的特定文本块。这就是我使用 JS 而不是纯 CSS 的原因。
我正在寻找优化以下代码的方法。
const pageNavRings = document.querySelectorAll('.page-nav-ring')
pageNavRings.forEach((pageRing) => {
pageRing.addEventListener('mouseover', (e) => {
const pageRingParent = e.target.closest('.page-nav__list--item')
pageRingParent.querySelector('.page-nav-label').classList.add('is-visible')
})
pageRing.addEventListener('mouseleave', (e) => {
const pageRingParent = e.target.closest('.page-nav__list--item')
pageRingParent.querySelector('.page-nav-label').classList.remove('is-visible')
})
})
似乎这段代码可以写得更好,更DRY。非常感谢所有和任何帮助。
【问题讨论】:
-
classList有一个toggle方法可能会有所帮助... -
更多的代码就是更少的代码。声明函数而不是在循环中创建大量类似的函数。还要检查是否可以通过使用事件委托来减少事件侦听器。
标签: javascript mouseover mouseleave