我有一个简单的.slideDown
函数:
$globalTabs.find('.seeMore a').live("click", function(){
$globalTabs.find(".allTabs").slideDown('slow');
});
当用户点击<a>
中的.allTabs
时,.allTabs
执行.slideUp
。
我想要做的是,如果用户没有点击.allTabs
中的任何内容并且鼠标不再在.allTabs
内,那么计时器会启动等待x时间,然后执行.slideUp
。此外,如果鼠标在.allTabs
触发器之前再次输入.slideUp
,则计时器停止并在鼠标移出.allTabs
不确定如何接近。任何帮助将不胜感激。
基本标记:
<div class="allTabs">
<a href="#">link 1</a>
<a href="#">link 2</a>
<a href="#">link 3</a>
<a href="#">link 4</a>
</div>
和
<li class="seeMore"><a href="#">see more</a></li>
答案 0 :(得分:4)
您可以使用setTimeout
和clearTimeout
函数,请注意,live
方法已被弃用,您可以使用on
方法。
var timeout;
$(document).on({
mouseenter: function(){
clearTimeout(timeout)
},
mouseleave: function(){
var $this = $(this)
timeout = setTimeout(function(){
$this.slideUp('slow')
}, 500)
},
}, ".allTabs")
<强>更新强>
var timeout;
$(document).delegate(".allTabs", "mouseenter", function() {
clearTimeout(timeout)
})
$(document).delegate(".allTabs", "mouseleave", function() {
var $this = $(this)
timeout = setTimeout(function() {
$this.slideUp('slow')
}, 1000)
})
答案 1 :(得分:1)
设置一个计时器,以便在slideup
和slidedown
mouseout
的回调中执行.allTabs
。取消mouseover
上.allTabs
上的计时器。
var $timer;
function hideAllTabs() {
$globalTabs.find(".allTabs").slideUp('slow');
}
$globalTabs.find('.seeMore a').live("click", function(){
$globalTabs.find(".allTabs").slideDown('slow', function() {
$timer = setTimeout(hideAllTabs, 1000);
});
});
$globalTabs.find(".allTabs").live("mouseout",function() {
$timer = setTimeout(hideAllTabs, 1000);
});
$globalTabs.find(".allTabs").live("mouseover",function() {
clearTimeout($timer);
});
答案 2 :(得分:0)
尝试这种方式:
$(function() {
var $allTabs = $globalTabs.find(".allTabs");
var timer;
$globalTabs.find('.seeMore a').live("click", function(){
$allTabs.slideDown('slow');
});
$allTabs.mouseout(function(){
timer = setTimeout(function() {$allTabs.slideUp()}, 3000);
});
$allTabs.mouseover(function() {
clearTimeout(timer);
});
});