纯JS实现hover元素加类、状态保持至hover另一同级元素的方法
首先你的原始代码存在多个语法和逻辑错误,以下是问题说明和正确实现:
错误点说明
- 原生JavaScript不存在
document.ready()方法,该方法是jQuery专属,原生要等待DOM加载完成需要监听DOMContentLoaded事件 - 方法名拼写错误:正确方法名为
getElementsByClassName,你少写了末尾的s,且该方法返回的是类数组集合,无法直接调用事件监听、classList等方法,需要遍历集合内的每一个元素再操作 classList的add/remove方法没有返回值,不支持链式调用- 事件绑定对象错误:你给默认隐藏的
.hidden元素绑定鼠标事件,默认状态下该元素不可见,无法触发mouseenter事件,应该给可 hover 的父容器.container绑定事件
正确实现代码
document.addEventListener('DOMContentLoaded', function() { // 获取所有容器元素 const containers = document.querySelectorAll('.container'); containers.forEach(container => { container.addEventListener('mouseenter', function() { // 先清除已激活的显示状态 const activeEl = document.querySelector('.show'); if (activeEl) { activeEl.classList.remove('show'); activeEl.classList.add('hidden'); } // 激活当前容器内的隐藏元素 const currentTarget = this.querySelector('.hidden'); if (currentTarget) { currentTarget.classList.remove('hidden'); currentTarget.classList.add('show'); } }); }); });
逻辑说明
你提供的CSS过渡规则本身可以正常生效,配合上述JS逻辑后,hover任意容器时只会激活当前容器内的隐藏元素,其余容器的元素自动恢复隐藏状态,鼠标离开所有容器后会按照你设置的9999秒延迟才会隐藏元素,符合需求。
内容的提问来源于stack exchange,提问作者oreb85
相关产品推荐
相关产品推荐

