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