我有这个代码,使菜单项向下和向上滑动。我想添加一个计时器,因此滑动延迟然后备份。
$(function () {
$("#menu").find("li").each(function () {
if ($(this).find("ul").length > 0) {
$(this).mouseenter(function () {
$(this).find("ul").stop(true, true).slideDown();
});
$(this).mouseleave(function () {
$(this).find("ul").stop(true, true).slideUp();
});
}
});
});
答案 0 :(得分:4)
看起来你正在用jQuery编写javascript
jQuery有一个用于动画队列的内置.delay
函数。
在您的示例中,将滑动动画延迟300毫秒看起来像
$(this).find("ul").stop(true, true).delay(300).slideDown();
答案 1 :(得分:0)
智能方法是在触发mouseleave之前将悬停意图添加到等待:
$("#menu").find("li:has(ul)").on('mouseenter mouseleave',function( e ){
var $UL = $(this).find('ul');
if(e.type==='mouseenter'){
clearTimeout( $(this).data('wait') );
$UL.stop(1,1).slideDown();
}else{
$(this).data('wait', setTimeout(function(){
$UL.stop().slideUp();
},180) );
}
});
if ($(this).find("ul").length > 0) {
,只需使用:("li:has(ul)")
li
的{{1}}个元素上触发您的活动孩子。ul
添加事件回调e
。mouseenter mouseleave
事件== e
..... mouseenter
为else
。mouseleave
属性,并将子项{slide}命名为data
ul
元素到达'遥远'li
我们必须越过一个空格(演示),通常会立即触发' slideUp()',但是我们在ul
的数据属性中设置了一个超时计数器,它将在运行前等待〜180ms。li
元素 - 为时间'li'的子项,我们清除超时(步骤1)'保留'鼠标中心状态。使用~180ms或您认为需要多少鼠标才能达到“远程”UL元素