Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕获鼠标离开身体元素穿过上边框_Javascript_Jquery_Html - Fatal编程技术网

Javascript 捕获鼠标离开身体元素穿过上边框

Javascript 捕获鼠标离开身体元素穿过上边框,javascript,jquery,html,Javascript,Jquery,Html,我想知道是否有一种方法可以捕捉某种鼠标事件,或者当鼠标越过顶部边界离开身体时的另一个事件 我在我的网站上有这个活动,当用户离开body元素并且cookie没有设置时,我只向他们显示这个弹出窗口一次。但这一事件会触发身体的各个方面 tr=休假触发事件 我想: tr +----------+ | | no-tr| |no-tr | | +----------+

我想知道是否有一种方法可以捕捉某种鼠标事件,或者当鼠标越过顶部边界离开身体时的另一个事件

我在我的网站上有这个活动,当用户离开body元素并且cookie没有设置时,我只向他们显示这个弹出窗口一次。但这一事件会触发身体的各个方面

tr=休假触发事件

我想:

            tr
       +----------+
       |          |
  no-tr|          |no-tr
       |          |
       +----------+
          no-tr
但我有

             tr
       +----------+
       |          |
     tr|          |tr
       |          |
       +----------+
          tr
我有这样的想法:

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

我的问题是,是否有一种方法仅在用户从上边框离开身体时触发此事件,而不是在其他边框时触发此事件?

您可以使用jquery尝试此方法:

$('#element').mouseout(function(e) {
if (e.offsetY < 0) {
 //   your event
}
});
$(“#元素”).mouseout(函数(e){
如果(e.offsetY<0){
//你的活动
}
});

编辑:对底部边缘无tr的编辑回答。没有注意到这个问题

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

如果页面是滚动的,您需要考虑scrollTop值,因为即使从屏幕顶部滚动,偏移量也将具有与元素上角的偏移位置

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

triggered=false;
$(“body”)。在(“mouseleave”上,函数(e){
if(e.offsetY-$(window).scrollTop()<0&!已触发){
触发=真;
警惕(“离开”);
}
});

您尝试执行的操作可能会出现重复,如果用户使用快捷方式关闭选项卡/浏览器(鼠标未离开主体),该怎么办。。。如果在用户离开页面之前设置cookie不是更好吗
window.onbeforeunload=function(){return“确定吗?”}
即使鼠标移出元素并穿过底部边缘,也会触发。我已经编辑了我的答案,使其仅在穿过顶部边界时触发。好的,这很好,但是如果我的页面向下滚动,偏移量很糟糕,当我离开我的身体时,感觉就像是在给随机数。当我第一次穿过身体的顶部离开时,它并不总是起作用。这是不可接受的解决方案,因为我必须把一个事件,所以如果它不工作的第一时间比它左挂!我已经试过了……问题仍然存在于偏移量本身。我试着重新加载页面,像页面中间的滚动一样,留下页面交叉顶部边框,i的随机值从-50到100,有时它第一次得到正确,有时像在第十。Feedle here:@user2945241您可以从offsetY值中去掉scrollTop值。更新了我的答案,这是一把小提琴,先生!是正确答案…请写下答案,这样我才能回答@user2945241我已经更新了我的答案,并包含了一个关于scrollTop值的部分
triggered = false;
$("body").on("mouseleave", function (e) {
    if (e.offsetY - $(window).scrollTop() < 0 && !triggered) {
        triggered = true;
        alert("leave");
    }
});