我的代码是:
$(document).ready(function() {
$('.holder').hover(function() {
$(this).find('.heading').slideUp();
},function() {
$(this).find('.heading').slideDown();
});
});
现在我想实现setTimeout
功能。但问题可能是$(this)
答案 0 :(得分:4)
只需将$(this)
存储在变量中,并在匿名函数中使用该变量:
$(document).ready(function() {
$('.holder').hover(function() {
var $self = $(this);
setTimeout(function(){
$self.find('.heading').slideUp();
}, 500);
},function() {
$(this).find('.heading').slideDown();
});
});
修改以回应评论:
$(document).ready(function() {
var timer;
$('.holder').hover(function() {
var $self = $(this);
timer = setTimeout(function(){
timer = false;
$self.find('.heading').slideUp();
}, 2000);
},function() {
if(timer){
clearTimeout(timer);
timer = false;
}else{
$(this).find('.heading').slideDown();
}
});
});
答案 1 :(得分:0)
如果您想等待下滑,您可以这样做:
$(document).ready(function() {
$('.holder').hover(function() {
$(this).find('.heading').slideUp();
},function() {
var me = this;
setTimeout(function() { $(me).find('.heading').slideDown(); }, 1000);
});
});
答案 2 :(得分:0)
答案 3 :(得分:0)
在所有给出的解决方案中,如果鼠标在悬停元素上多次通过,则操作将在一个开放和关闭的怪物中级联。
每次悬停时尝试取消暂停。例如:
function slideHover()
{
jqHolder = $('.holder');
var time = jqHolder.data('time');
if (time)
{
clearTimeout(time);
}
time = setTimeout(function() {
jqHolder.find('.heading').slideToggle();
}, jqHolder.is(':hidden') ? 0 : 500);
jqHolder.data('time',time);
}
$(document).ready(function() {
$('.holder').hover(slideHover, slideHover);
});