Javascript 悬停时切换延迟类

Javascript 悬停时切换延迟类,javascript,jquery,jquery-hover,Javascript,Jquery,Jquery Hover,我打开我的子菜单,将类显示添加到它的父菜单。我想实现的是,当我将鼠标悬停在父菜单上时,如果没有“活动”悬停,立即打开子菜单,但如果已经显示子菜单,则等待1秒,然后再打开新的子菜单。我之所以要这样做,是因为鼠标移动“不好”,它会等待鼠标离开子菜单/父菜单,以查看是否在1秒内重新进入 我知道有很多类似的线程,但我已经尝试过了,现在看不出我做错了什么: $('.menu>li')。悬停(函数(){ var ele=$(本); 如果($('.menu li.REVEL')。长度>0){ var t=s

我打开我的子菜单,将类显示添加到它的父菜单。我想实现的是,当我将鼠标悬停在父菜单上时,如果没有“活动”悬停,立即打开子菜单,但如果已经显示子菜单,则等待1秒,然后再打开新的子菜单。我之所以要这样做,是因为鼠标移动“不好”,它会等待鼠标离开子菜单/父菜单,以查看是否在1秒内重新进入

我知道有很多类似的线程,但我已经尝试过了,现在看不出我做错了什么:

$('.menu>li')。悬停(函数(){
var ele=$(本);
如果($('.menu li.REVEL')。长度>0){
var t=setTimeout(函数(){
if(ele.hover()){
$('.menu li.REVEL').removeClass('REVEL');
ele.addClass(“揭示”);
}
}, 1000);
}否则{
ele.addClass(“揭示”);
}
});

let timers=[],open=false;
$('.menu>li')。悬停(函数(){
if(this.dataset.timer){
forEach(t=>clearTimeout(t));
clearTimeout(parseInt(this.dataset.timer));
删除this.dataset.timer;
开=假;
}else if($(this).hasClass('reveal')){
this.dataset.timer=setTimeout(()=>{
$(this.removeClass('reveal');
删除this.dataset.timer;
开=假;
}, 1000);
开放=真实;
}否则,如果(打开){
timers.push(设置超时(()=>{
$('.menu>li')。removeClass('reveal');
$(this.addClass('reveal');
}, 1000));
}否则{
$('.menu>li')。removeClass('reveal');
$(this.addClass('reveal');
}
});
。子菜单{
显示:无;
}
.menu>li.ul{
显示:块;
}