setTimeout函数在第一次鼠标输入/悬停时未触发
setTimeout function not triggering on first mouseenter / hover
概述:我正在创建一个菜单,当您将鼠标悬停在类为"showhim"的列表项上时,该菜单将显示div"showme"。我希望在列表项之间切换时有延迟,所以我包含了setTimeout函数。
问题:没有在第一个mouseenter事件上触发setTimeout函数。如果我删除setTimeout函数,mouseenter事件就可以正常工作。鼠标输入
已尝试:我试过mouseover和mouseout,看看它是否会有所不同。如果我把鼠标放在跨度(菜单项名称(上,setTimeout函数就会触发。
此外,当我在最上面的父div上放置一个边框,并在输入"showhim"之前将光标悬停在边框上时,setTimeout函数就会被触发,菜单也会正常工作。我不知道为什么边境会让它发挥作用。。
// Fake these for the snippet
var isHomepage = false;
function isMobile() {
return false;
}
// End of fake
$('.showhim').mouseenter(function() {
if (!isMobile()) {
var $this = $(this);
timer = setTimeout(function() {
$('.mastermenuitem').removeClass('menu-active');
$('.mainmenuitem').removeClass('nav-active');
$('.showme').css('display', 'none');
// Expand Shop Menu Container
if (isHomepage && !isMobile()) {
var corecenter_width = $('#corecenter').innerWidth();
$('#shop-menu-container').css('width', corecenter_width - (border_width * 2));
}
// Add active class to clicked menu item
$this.find('li').addClass('menu-active');
$this.find('.showme').css('display', 'block');
$this.find('.mainmenuitem').addClass('nav-active');
}, 150);
}
}).mouseleave(function() {
clearTimeout(timer);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- setTimeout triggered when hovering over shop-menu-container border -->
<div id="shop-menu-container">
<div class="menu-wrapper">
<div class="showmemaster">
<div class="showhim-wrapper">
<!-- Trigger Element-->
<div class="showhim">
<!-- mouseover works the first time when hovering over the span -->
<ul><li class="mainmenuitem"><span>Menu Item 1</span></li></ul>
<div class="showme" style="display:none;">
Content 1
</div>
</div>
<div class="showhim">
<ul><li class="mainmenuitem"><span>Menu Item 2</span></li></ul>
<div class="showme" style="display:none;">
Content 2
</div>
</div>
</div>
</div>
已解决:我有两个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);
}
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 使用鼠标输入图表时禁用自动点悬停
- 鼠标输入悬停分区显示/隐藏
- 在Jquery中将鼠标悬停在图像上后获取输入标记的URL
- 通过将鼠标悬停在距离矩阵上然后轻拔输入地址和邮政编码来更改输入地址和邮政编码
- 悬停(),鼠标输入(),鼠标悬停()等来回跳跃
- 在悬停问题上更改输入
- Jquery悬停在子分区输入时失败
- jQuery在悬停输入/输出时作为进度条
- 当鼠标悬停在其他元素上时,如何删除和重新设置输入焦点
- 如何在鼠标悬停时将焦点设置为输入元素(搜索框)
- 滚动时未触发鼠标悬停/鼠标输入
- 当我将鼠标悬停在按钮上时,使用javascript或CSS来改变输入区域的颜色
- 悬停事件在第一次调用鼠标时停止鼠标输入事件
- 鼠标输入/离开&鼠标悬停/移出问题
- 悬停和/或点击自动聚焦输入字段
- 是否可以在输入中的键入文本上设置鼠标悬停触发器
- setTimeout函数在第一次鼠标输入/悬停时未触发
- 如何在输入范围内获得悬停时间的值