7

hoverintent 插件与我需要的相反。我有一个由 .trigger 触发的 .popup,当我将鼠标悬停在它上面时,我希望 .popup 不会淡出几秒钟,但如果我悬停,然后再次悬停,取消将要发生的淡出并保持 .popup 打开。

有谁知道我会怎么做?

这不起作用,但这是一个想法:

 $('.trigger').hover(function(){
        $('.popup').fadeIn(600)
    }, function() {
        $('.popup').delay(2000, function(){
            if ($(this).blur() = true) {
                $('.popup').fadeOut(600)
            }
        });
    })
4

4 回答 4

12

jQuery HoverIntent 插件正是您想要的。

timeout 属性将设置在调用 out 函数之前鼠标需要离开该区域的时间量。

来自悬停意图网站的报价:

timeout:调用“out”函数之前的简单延迟,以毫秒为单位。如果用户在超时到期之前将鼠标移回元素上,则不会调用“out”函数(也不会调用“over”函数)。这主要是为了防止马虎/人类鼠标轨迹暂时(和无意地)使用户离开目标元素......让他们有时间返回。默认超时:0

要设置它...

$('.trigger').hoverIntent({
     over: startHover,
     out: endHover,
     timeout: 2000
});

然后定义要处理的函数overout

 function startHover(e){
    //your logic here
    $('.popup').fadeIn(600)
 }

 function endHover(){
     //your logic here
     $('.popup').fadeOut(600)
 }

编辑:

您还可以调整interval属性以增加/减少 startHover 函数触发的时间...默认设置为 100 毫秒...您可以将其设置为零以在鼠标进入后立即触发弹出窗口如果你愿意,触发区域。

于 2011-01-28T17:19:55.407 回答
3

这是最简单的方法,无需额外的插件:

$('.trigger').hover(function() {
    clearTimeout(this.timer);
    $('.popup').fadeIn(600);
}, function() {
    this.timer = setTimeout(function() { 
        if ($(this).blur() = true) { // off topic: you should to check this condition ;)
            $('.popup').fadeOut(600);
        }
    }, 2000);
});

setTimeout() 和 clearTimeout() 一直是 HTML DOM Window 对象的原生 JS 函数。

于 2013-12-25T19:57:25.687 回答
1

您可以尝试使用 jquery hoverintent 插件。

于 2011-01-28T17:17:45.350 回答
-1

这对我有用:

$(".triger").mouseenter(function() {
    $(this).find("popup").fadeIn();
}).mouseleave(function() {
    $(this).find("popup").delay(200).fadeOut();
});
于 2012-10-26T07:52:21.583 回答