将鼠标悬停在图像上时显示图像预览。现在我在显示预览图像之前保留间隔。假设我将延迟设置为1秒,如果我将鼠标拖出图像,它仍会显示预览,因为它在鼠标输入过程中被触发。如何解决这个问题?
我需要在1秒延迟后仅在悬停时显示预览,而不是在图像中没有鼠标时显示?
答案 0 :(得分:2)
在jQuery 1.9+上,您可以使用delay/finish
:
$("#preview").hover(function(){
$("img").delay(1000).show(0); // passing 0 to show() will put animation in queue
}, function(){
$("img").finish().hide(); // finish() will clear any previous delay(), despite what argues the DOC
});
答案 1 :(得分:1)
使用setTimeout()的基本骨架可以是
var timer;
$('img').hover(function () {
timer = setTimeout(function () {
//do your stuff here
$('div').show();
timer = undefined;
}, 1000);
}, function () {
if (timer) {
clearTimeout(timer);
timer = undefined;
} else {
//hide the preview
$('div').hide();
}
})
演示:Fiddle
答案 2 :(得分:0)
将setTimeout分配给鼠标悬停事件上的变量,如下所示:
var timer = setTimeout(function() { doSomething(); }, 1000);
然后在mouseout事件中清除,以便在您将鼠标悬停时显示:
clearTimeout(timer);