Javascript setTimeout函数在第一次鼠标指针/悬停时未触发
概述: 我正在创建一个菜单,当您将鼠标悬停在类为“showhim”的列表项上时,它会显示一个div“showme”。我希望在列表项之间切换时有一个延迟,因此我包含了一个setTimeout函数 问题:setTimeout函数未在第一个mouseenter事件中触发。如果删除setTimeout函数,mouseenter事件可以正常工作。 滑鼠 已尝试: 我试过mouseover和mouseout,想看看这是否会有所不同。如果我将鼠标放在span(菜单项名称)上,则会触发setTimeout函数 此外,当我在最上面的父div上放置一个边框,并在输入“showhim”之前将鼠标悬停在边框上时,setTimeout函数被触发,菜单工作正常。我不知道为什么边境会起作用Javascript setTimeout函数在第一次鼠标指针/悬停时未触发,javascript,jquery,html,mouseevent,jquery-hover,Javascript,Jquery,Html,Mouseevent,Jquery Hover,概述: 我正在创建一个菜单,当您将鼠标悬停在类为“showhim”的列表项上时,它会显示一个div“showme”。我希望在列表项之间切换时有一个延迟,因此我包含了一个setTimeout函数 问题:setTimeout函数未在第一个mouseenter事件中触发。如果删除setTimeout函数,mouseenter事件可以正常工作。 滑鼠 已尝试: 我试过mouseover和mouseout,想看看这是否会有所不同。如果我将鼠标放在span(菜单项名称)上,则会触发setTimeout函数
//为代码段伪造这些
var isHomepage=false;
函数isMobile(){
返回false;
}
//假货的终结
$('.showhim').mouseenter(函数(){
如果(!isMobile()){
var$this=$(this);
计时器=设置超时(函数(){
$('.mastermenuitem').removeClass('menu-active');
$('.mainmenuitem').removeClass('nav-active');
$('.showme').css('display','none');
//展开商店菜单容器
if(isHomepage&!isMobile()){
var corecenter_width=$('#corecenter')。innerWidth();
$(“#商店菜单容器”).css('width',corecenter_width-(border_width*2));
}
//将活动类添加到单击的菜单项
$this.find('li').addClass('menu-active');
$this.find('.showme').css('display','block');
$this.find('.mainmenuitem').addClass('nav-active');
}, 150);
}
}).mouseleave(函数(){
清除超时(计时器);
});代码>
菜单项1
内容1
菜单项2
内容2
已解决:
我有两个setTimeout函数引用同一个计时器变量
我所做的只是创建了另一个计时器,悬停正常工作
var timer; // setTimeout for Menu Close
var timer2; // setTimeout for Showhim
// TIMER 2
$('.showhim').mouseenter(function() {
// Do something
}, showhim_timeout);
}).mouseleave(function() {
clearTimeout(timer2);
});
// TIMER 1
function timeoutMenu() {
timer = setTimeout(function() {
close();
}, menu_timeout);
}
function stopTimeout() {
clearTimeout(timer);
}
旁注:HTML是无效的li
只能是template
、ul
和ol
的直接子项。在您的问题中,我已将您引用的代码转换为堆栈片段,使所需的更改绝对最少(定义isHomepage
和isMobile
并将要显示的内容放在.showme
中)。在代码段中工作,问题在于其他地方(可能在该变量和函数中?)。这是创建true的优点。感谢您的输入。我解决了问题,并用解决方案更新了原始帖子。问题出在计时器变量上。答案不在问题中。回答您自己的问题是可以的,但您必须通过发布答案来实现。有关更多信息,请参阅和。但这是非常不正确的我很想在将来帮助其他人,我只想使用它下面的“删除”链接。