weixin_慕哥2417596
那是有事件冒泡的问题吧
_佛提子
你在css那个 .active{
display:block 加个!important;}
不知道为啥,但是这样做可以显示
KingOflongkouWest
// 定义类
class Menu {
// 构造函数
constructor (id) {
// 获取 id为 menu-box 的标签
this.box = document.querySelector(id);
// 获取 menu-box 第一个 ul 标签
this.ul = this.box.querySelector("ul");
// 获取 menu-box 所有 li 标签
this.lis = this.box.querySelectorAll("li");
// 获取 menu-box 所有 class 为 sub-menu 的标签
this.subMenuEles = this.box.querySelectorAll(".sub-menu");
this.timer1 = null;
this.timer2 = null;
this.init();
}
init () {
this.lis.forEach((item) => {
item.addEventListener("mouseenter",(e) => {
let li = e.target;
if (this.timer1 != null) {
clearTimeout(this.timer1);
}
this.timer1 = setTimeout(() => {
li.children[1].classList.add("active");
}, 200)
})
});
this.lis.forEach((item) => {
item.addEventListener("mouseleave", (e) => {
let li = e.target;
if (this.timer2 != null) {
clearTimeout(this.timer2);
}
this.timer2 = setTimeout(() => {
// 如果快速移动,li.childeren[1].classList.remove("active")
// 会因为上面的判断而没有执行,所以会出现鼠标移开但是二级列表还显示的问题
// 鼠标离开后,遍历二级列表,把二级列表的classList中的active去掉
this.subMenuEles.forEach((item) => {
item.classList.remove("active")
});
// li.children[1].classList.remove("active");
}, 200)
})
});
}
}
qq_精慕门4011612
慕村2030239
id的位置写错了
薛之涛
qq_慕盖茨0456175
你发的代码错误百出,核对一下代码吧。
报错是发生在倒数第二个remove那里的,第一个循环的事件是mouseenter不是mouse,而且你第二个循环那里怎么有两个循环?而且怎么是item.classList?
菜鸟00001
检查一下你的li中有没有sub-menu这个盒子
js中
this.subMenuEles = this.box.querySelectorAll(".sub-menu")
有一句是关联到这个盒子的
小可爱i
因为你没有给出上下文,所以建议你看看这几种情况。
(1)li确定是否存在
(2)li必须是DOM对象
(3)li的子元素有几个,如果只有1个或者没有,li.children[1]就是数组越界,自然为 undefined
慕仔845268
sub-menu好多呢,第二个显示的位置在另一个盒子里
薛之涛
querySelectorAll 少了or