鼠标悬停时出现棘手的延迟

发布于 2024-08-06 00:52:34 字数 673 浏览 6 评论 0原文

这就是我目前所拥有的:

$("#cart-summary").mouseenter(function () {
    $('.flycart').delay(500).slideDown('fast');
});
$(".flycart").mouseleave(function () {
    $('.flycart').delay(500).slideUp('fast');
}).find('a.close').click(function(){
   $(this).parents('.flycart').hide();
});

它的作用是:

如果鼠标悬停在 #cart-summary -> 500ms 后打开 Flycart

如果 mouseout .flycart -> 500 毫秒后关闭 Flycart

我需要的是:

如果鼠标悬停在 #cart-summary 上至少 500 毫秒 -> 如果 mouseout .flycart 至少 500 毫秒,则打开 Flycart

-> close Flycart

编辑添加: 我也使用hoverIntent,如果可以在这里使用吗?

非常感谢!

This is what I have currently:

$("#cart-summary").mouseenter(function () {
    $('.flycart').delay(500).slideDown('fast');
});
$(".flycart").mouseleave(function () {
    $('.flycart').delay(500).slideUp('fast');
}).find('a.close').click(function(){
   $(this).parents('.flycart').hide();
});

What it does is:

If mouseover #cart-summary -> open flycart after 500ms

if mouseout .flycart -> close flycart after 500ms

What I need is:

If mouseover #cart-summary for ATLEAST 500ms -> open flycart

if mouseout .flycart for ATLEAST 500ms -> close flycart

Edited to Add: I also use hoverIntent, if that can be used here?

Many thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

若沐 2024-08-13 00:52:34

使用 setTimeout 检查您设置/取消设置的标志(我正在使用一个类)是否仍然有效。

$("#cart-summary").mouseenter(function () {
    $("#cart-summary").addClass("hasFocus");
    setTimeout(function(){ 
        if ($("#cart-summary").hasClass("hasFocus")) {
            $('.flycart').slideDown('fast');
        }
      }, 500 );
      });

$("#cart-summary").mouseleave(function () {
    $("#cart-summary").removeClass("hasFocus");
});


$(".flycart").mouseenter(function () {
    $("#cart-summary").removeClass("lostFocus");    
});

$(".flycart").mouseleave(function () {
    $("#cart-summary").addClass("lostFocus");
    setTimeout(function(){ 
        if ($("#cart-summary").hasClass("hasFocus")) { 
            $('.flycart').slideUp('fast');
            }).find('a.close').click(function(){
            $(this).parents('.flycart').hide();
        }
    }, 500)
});

Use the setTimeout to check if a flag you set/unset (I'm using a class) is still valid.

$("#cart-summary").mouseenter(function () {
    $("#cart-summary").addClass("hasFocus");
    setTimeout(function(){ 
        if ($("#cart-summary").hasClass("hasFocus")) {
            $('.flycart').slideDown('fast');
        }
      }, 500 );
      });

$("#cart-summary").mouseleave(function () {
    $("#cart-summary").removeClass("hasFocus");
});


$(".flycart").mouseenter(function () {
    $("#cart-summary").removeClass("lostFocus");    
});

$(".flycart").mouseleave(function () {
    $("#cart-summary").addClass("lostFocus");
    setTimeout(function(){ 
        if ($("#cart-summary").hasClass("hasFocus")) { 
            $('.flycart').slideUp('fast');
            }).find('a.close').click(function(){
            $(this).parents('.flycart').hide();
        }
    }, 500)
});
花辞树 2024-08-13 00:52:34

听起来您可能需要 HoverIntent 插件。

我不知道它是否能帮助你解决鼠标移出至少 500 毫秒的问题。但也许有一个选择。

Sounds like you might need the HoverIntent plugin.

I don't know if it'll help you with the mouseout ATLEAST 500ms though. But maybe there's an option in there for that.

一刻暧昧 2024-08-13 00:52:34

您可以使用 hoverIntent 插件,如下所示:

var config = {    
     sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
     interval: 500, // number = milliseconds for onMouseOver polling interval    
     timeout: 500, // number = milliseconds delay before onMouseOut    
};

$(".flycart").hoverIntent(function () {
        $('.flycart').slideDown('fast');
}, function() {
        $('.flycart').slideUp('fast');
}).find('a.close').click(function(){
   $(this).parents('.flycart').hide();
});

You can use the hoverIntent plugin as follows:

var config = {    
     sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
     interval: 500, // number = milliseconds for onMouseOver polling interval    
     timeout: 500, // number = milliseconds delay before onMouseOut    
};

$(".flycart").hoverIntent(function () {
        $('.flycart').slideDown('fast');
}, function() {
        $('.flycart').slideUp('fast');
}).find('a.close').click(function(){
   $(this).parents('.flycart').hide();
});
别靠近我心 2024-08-13 00:52:34

你可以这样做:

var timeout,
    $flycart = $(".flycart"),
    $summary = $("#cart-summary"),
    delay = 500;

$summary.mouseenter(function () {
    if (timeout) window.clearTimeout(timeout);
    timeout = window.setTimeout(function(){
        if ( $flycart.is(":visible") ) {
            $flycart.slideDown('fast');
        }
    }, delay);
});
$flycart.mouseleave(function () {
    if (timeout) window.clearTimeout(timeout);
    timeout = window.setTimeout(function(){
        if ( $flycart.is(":visible") ) {
            $flycart.slideUp('fast');
        }
    }, delay);
})...

You could do:

var timeout,
    $flycart = $(".flycart"),
    $summary = $("#cart-summary"),
    delay = 500;

$summary.mouseenter(function () {
    if (timeout) window.clearTimeout(timeout);
    timeout = window.setTimeout(function(){
        if ( $flycart.is(":visible") ) {
            $flycart.slideDown('fast');
        }
    }, delay);
});
$flycart.mouseleave(function () {
    if (timeout) window.clearTimeout(timeout);
    timeout = window.setTimeout(function(){
        if ( $flycart.is(":visible") ) {
            $flycart.slideUp('fast');
        }
    }, delay);
})...
余生再见 2024-08-13 00:52:34

提供的解决方案将会起作用

var mouseenterTimerCart;
var mouseleaveTimerCart;

$(document).on({
    mouseenter: function () {
        if (mouseleaveTimerCart) clearTimeout(mouseleaveTimerCart);
        mouseenterTimerCart = setTimeout(function() {
            $("#head-cart .cart_items").show()
        }, 500);
    },
    mouseleave: function () {
        if (mouseenterTimerCart) clearTimeout(mouseenterTimerCart);
        mouseleaveTimerCart = setTimeout(function() {
            $("#head-cart .cart_items").hide()
        }, 500);
    }
}, "#head-cart .full, #head-cart .cart_items");

如果购物篮动态更新,

$("#head-cart").html(...crat-html-block...)

offer a solution

var mouseenterTimerCart;
var mouseleaveTimerCart;

$(document).on({
    mouseenter: function () {
        if (mouseleaveTimerCart) clearTimeout(mouseleaveTimerCart);
        mouseenterTimerCart = setTimeout(function() {
            $("#head-cart .cart_items").show()
        }, 500);
    },
    mouseleave: function () {
        if (mouseenterTimerCart) clearTimeout(mouseenterTimerCart);
        mouseleaveTimerCart = setTimeout(function() {
            $("#head-cart .cart_items").hide()
        }, 500);
    }
}, "#head-cart .full, #head-cart .cart_items");

will work if the basket is updated dynamically

$("#head-cart").html(...crat-html-block...)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文