jquery:隐藏触发器或弹出窗口的 mouseleave 事件上的弹出窗口

发布于 2024-12-10 16:44:48 字数 665 浏览 0 评论 0原文

我有一个弹出菜单出现在我的页面上的元素的 onclick 事件中,如下所示...

$('.triggerDiv').click(function() {
    var pos = $(this).offset();
    $('#popupDiv').css({
            "left": (pos.left + this.width()) + "px",
            "top": pos.top + "px"
        }).slideDown();
});

我还有一个 mouseleave 事件附加到弹出窗口以将其隐藏在 mouseleave 上。

$('#popupDiv').mouseleave(function() {
    $('#popupDiv').slideUp();
});

我想做的是,如果鼠标也离开触发器,则隐藏弹出窗口。简单的解决方案是 -

$('.triggerDiv').mouseleave(function() {
    $('#popupDiv').slideUp();
});

但问题是我在页面上有多个触发元素,它们都显示相同的弹出 onclick。在这种情况下,我如何正确处理 mouseleave 事件以隐藏/显示弹出窗口?

I have a popup menu appearing onclick event of an element on my page like this...

$('.triggerDiv').click(function() {
    var pos = $(this).offset();
    $('#popupDiv').css({
            "left": (pos.left + this.width()) + "px",
            "top": pos.top + "px"
        }).slideDown();
});

I also have a mouseleave event attached to the popup to hide it on mouseleave.

$('#popupDiv').mouseleave(function() {
    $('#popupDiv').slideUp();
});

What I want to do is hide the popup if the mouse leaves the trigger as well. Simple solution would be -

$('.triggerDiv').mouseleave(function() {
    $('#popupDiv').slideUp();
});

But the problem is that I have multiple trigger elements on the page that all display the same popup onclick. In this case how can I correctly handle the mouseleave event to hide/show the popup?

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

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

发布评论

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

评论(2

小清晰的声音 2024-12-17 16:44:48

要确保弹出窗口仅在用户的鼠标离开弹出窗口和触发器 div 时关闭,请尝试以下代码:

var closeTimer;

$("#popupDiv, .triggerDiv")
    .mouseleave(function() {
        closeTimer = setTimeout(function() {
            $('#popupDiv').slideUp();
        }, 300);
    })
    .mouseenter(function() {
        if(closeTimer) { closeTimer = clearTimeout(closeTimer); }
    });

上面的代码使用 setTimeout 函数在关闭弹出窗口之前等待 300 毫秒。这为用户提供了足够的时间将鼠标从触发器 div 移动到弹出窗口,反之亦然。请注意,当用户的鼠标进入弹出窗口时,代码通过使用 clearTimeout 取消 closeTimer 来防止弹出窗口关闭。根据我的经验,这使得弹出窗口和悬停菜单更易于使用。

另外,如果有大量 .triggerDiv,我会考虑使用 live events

To ensure that the popup only closes when use's mouse has left both the popup and the trigger-div, try this code:

var closeTimer;

$("#popupDiv, .triggerDiv")
    .mouseleave(function() {
        closeTimer = setTimeout(function() {
            $('#popupDiv').slideUp();
        }, 300);
    })
    .mouseenter(function() {
        if(closeTimer) { closeTimer = clearTimeout(closeTimer); }
    });

The code above uses the setTimeout function to wait 300 milliseconds before closing the popup. This gives the user enough time to move their mouse from the trigger-div to the popup and vise versa. Note that when the user's mouse enters the popup, the code prevents the popup from closing by using clearTimeout to cancel the closeTimer. In my experience this makes popups and hover menus much easier to use.

Also, if there are large number of .triggerDivs, I'd consider using live events.

野侃 2024-12-17 16:44:48

在函数体中使用 JQuery $(this) 引用:

$('.triggerDiv').mouseleave(function() { 
    $(this).slideUp(); 
});

Use a JQuery $(this) reference in the function body:

$('.triggerDiv').mouseleave(function() { 
    $(this).slideUp(); 
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文