Javascript在菜单项上没有延迟,但是悬停离开菜单时有5秒延迟
Javascript no delay on menu items, but 5 second delay when hover off menu
我有一个下拉菜单,我希望能够悬停在每个下拉,有0.3秒的延迟,但当你滚下菜单,我希望它暂停2秒前淡出。
标记:
<ul class="mainnav">
<li><a href="#">item 1</a>
<ul class="sub">
<li><a href="#">item a</a></li>
<li><a href="#">item b</a></li>
<li><a href="#">item c</a></li>
</ul>
</li>
<li><a href="#">item 2</a>
<ul class="sub">
<li><a href="#">item d</a></li>
<li><a href="#">item e</a></li>
<li><a href="#">item f</a></li>
</ul>
</li>
</ul>
jquery: function(){
$('.mainnav > li').hover(
function () {
$(this).find('sub').fadeIn(300);
},
function () {
$(this).find('sub').fadeOut(300);
}
);
$('.mainnav').mouseout( function() {
setTimeout(function() {
$(this).find('sub').fadeOut(300);
}, 2000);
});
}
因此,如果我翻转'item 1',它会向下拉并显示'item a', 'item b', 'item c'。如果我滚动'项目2',它会向下拉并显示'项目d', '项目e', '项目f'。
现在如果我滚出'。Mainnav '我希望滚动的下拉菜单在淡出之前延迟。
但这不是它在做什么。它只是逐渐消失,就像在另一个菜单项上滚动一样。
您使用选择器的方式错误。$('sub')
将查找名为 sub的标签,但是您想要查找具有类sub的元素,您应该使用$('.sub')
。这并不能解决你的问题。试试下面的代码
$('.mainnav > li').hover(
function () {
$(this).find('.sub').fadeIn(300);
},
function () {
var sub = $(this).find('.sub');
setTimeout(function () {
sub.fadeOut(300);
}, 2000)
}
);
并且您不需要为.mainnav
单独的mouseout事件处理程序。jquery hover
的第二个参数是mouseout处理程序。
为了描述我的答案,创建var sub = $(this).find('.sub');
是为了保存对悬停的.sub
的引用并将其传递给函数,因为匿名函数中的this
将引用window
对象
如果用户将鼠标从菜单上移开并在菜单完全淡出之前再次悬停鼠标,则下面的代码将防止淡出+淡出。
$('.mainnav > li').hover(
function () {
//this clears the timeout that is going to cause a fadeout
window.clearTimeout(window.menufade);
$(this).find('.sub').fadeIn(300);
},
function () {
var sub = $(this).find('.sub');
//this clears the timeout that is going to cause a fadeout, not necessary here I think, but i'll let it be :)
window.clearTimeout(window.menufade);
window.menufade = setTimeout(function () {
sub.fadeOut(300);
}, 2000)
}
);
相关文章:
- 鼠标悬停弹出窗口,但有延迟
- CSS使悬停延迟
- 具有悬停延迟的 OpenLayers 选择功能控件
- 如何延迟 jquery 悬停事件
- 如何在引导下拉列表悬停时添加延迟
- 多事件函数中的悬停延迟
- 悬停意图/悬停延迟 jQuery.
- jQuery:将悬停延迟到第二次
- 功能前延迟,悬停时取消功能
- 使用Javascript向鼠标悬停添加延迟
- JavaScript&悬停链接延迟
- 旋转瓷砖;如何在悬停后延迟转换
- 如何延迟悬停时立即出现的超级菜单
- 鼠标悬停在jquery上更改图片时出现延迟
- 如何在悬停按钮时通过文本切换图像,并延迟反向切换
- 默认情况下,浏览器延迟加载悬停图像
- 当鼠标悬停时调用插件时会有延迟,同时鼠标悬停时也会取消
- 在悬停延迟中添加延迟
- 如何延迟jquery悬停事件
- jQuery 悬停 - 如果光标未重新悬停在元素上,则延迟后隐藏