javascript - 捕获鼠标离开 body 元素越过顶部边界

标签 javascript jquery html

我想知道当鼠标离开 body 越过顶部边界时,是否有一种方法可以捕获某种鼠标事件或其他事件?

好吧,当用户离开 body 元素并且未设置 cookie 时,我在我的站点上进行了此事件,我只向他们展示了一次此弹出窗口。但此事件会触发 body 的各个方面。

tr = 休假触发事件

我想:

            tr
       +----------+
       |          |
  no-tr|          |no-tr
       |          |
       +----------+
          no-tr

但是我有

             tr
       +----------+
       |          |
     tr|          |tr
       |          |
       +----------+
          tr

我有这样的东西:

$("body").one("mouseleave", initPopup)

我的问题是,是否有一种方法可以仅在用户离开 body 时触发此事件,而不是其他边界?

最佳答案

您可以使用 e.offsetY 并检查它是否小于 0。偏移量是从元素的左上角开始计算的,Y 向下增加。如果 e.offsetY 小于 0,则表示当鼠标移动到附加了事件处理程序的元素上方时触发了事件。

如果页面滚动,您需要考虑 scrollTop 值,因为 offsetY 将具有距元素顶 Angular 的偏移位置,即使它滚动到屏幕顶部之外也是如此。

由于即使鼠标从另一侧移出也会触发事件,因此您不能使用 .one() 而是可以添加一个条件来检查事件是否已被触发来自顶部的“鼠标离开”。

DEMO

triggered = false;
$("body").on("mouseleave", function (e) {
    if (e.offsetY - $(window).scrollTop() < 0 && !triggered) {
        triggered = true;
        alert("leave");
    }
});

关于javascript - 捕获鼠标离开 body 元素越过顶部边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23776195/

相关文章:

javascript - 如何在 Angular 中的查询参数更改时重用路由,但不在路径参数更改时重用?

javascript - 生成随机元素位置并防止在 JavaScript 中重叠

Jquery 同位素库将选择移动到第一个位置?

jquery - 下拉菜单不会在悬停时显示

javascript - ionic 后退按钮未显示在选项卡页面中且动画丢失

javascript - 将正则表达式添加到 Vue.js 数据对象

Safari 中的 jQuery keyup 和 'enter'

javascript - 如何使用 Javascript/JQuery CSS 获得平滑的正弦波交替

javascript - 通过 HTML5 filereader 在本地读取大图像作为缩略图

jquery - Wordpress 自定义图库可见性隐藏显示空白