这个Jquery问题一直困扰着我一段时间。我开发了一个脚本,其中一个功能可以检测鼠标何时从页面顶部离开。这是代码:
$(document).bind("mouseleave", function(e)
{
console.log(e.pageY);
if (e.pageY <= 1)
{
now = new Date();
for (i=0; i < times.length; i++)
{
if (now.getTime() > times[i][0] && now.getTime() < times[i][1])
{
$.fn.colorbox({iframe:true, width:650, height:600, href: "work.html", open: true});
}
}
}
});
这适用于所有浏览器。出于某种原因,它在Chrome中随机工作,在Firefox中对于测试该网站的朋友来说似乎完全没有。在我的浏览器(firefox 3.5.3)中,e.pageY在控制台框中记录为0附近的数字,但在我的朋友浏览器(也是firefox 3.5.3)中,最低值约为240.我不知道为什么这样正在考虑相同的浏览器。有没有人知道如何调试这个,或者另一个更可靠的方法来检测鼠标何时通过顶部退出网页?我希望这是有道理的。
答案 0 :(得分:12)
如果您的窗口向下滚动,则会出现问题,向您的页面添加一堆<br/>
并向下滚动一行,您就会看到它。
因此,不要查看e.pageY&lt; = 1,而是减去scrollTop:
if (e.pageY - $(window).scrollTop() <= 1)
{
// do something
}
答案 1 :(得分:0)
我使用了另一种技术,几乎适用于所有浏览器。诀窍是使用$("body")
或$(window)
。
$(window)
不适用于IE,但$("body")
部分适用于FF,因为正文可能无法填满整个窗口。
以下是整页代码:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script><script>
var mouseX = 0;
var mouseY = 0;
var theFrame;
$(function() {
theFrame = $("body"); //$(window) for non-IE
theFrame.mousemove( function(e) {
//horizontal distance from edge
mouseX = Math.min(theFrame.width() - e.pageX, e.pageX);
//vertical distance from top
mouseY = e.pageY;
$("#mx").html(mouseX);
$("#my").html(mouseY);
});
theFrame.mouseout(function() {
if(mouseY<=mouseX)
$("#in_out").html("out-top");
else
$("#in_out").html("out");
});
theFrame.mouseover(function() {
$("#in_out").html("in");
});
});
</script>
</head>
<body>
<span id="in_out"></span>
<br />Hor: <span id="mx"></span>
<br />Ver: <span id="my"></span>
</body>
</html>
答案 2 :(得分:0)
$(document).on('mouseleave', leaveFromTop);
function leaveFromTop(e){
if( e.clientY < 0 ) // less than 60px is close enough to the top
alert('y u leave from the top?');
}
此版本doesn't work适用于较旧的IE版本,因为这些版本不会报告鼠标位置,但它已经足够了。
答案 3 :(得分:0)
如果您只是想要一些不需要在EI中工作的轻量级,那么这是一个香草JS解决方案
/**
* Trigger an event when the cursor leaves the top of the window
* @param {*} threshold how close does it need to be to the top
* @param {*} cb callback function to trigger
*/
function onExit (threshold, cb) {
threshold = threshold || 60
var hasExited = false
document.addEventListener('mouseout', function (e) {
if (e.clientY < threshold && e.movementY < 0 && !hasExited) {
hasExited = true
cb(e)
}
})
}
使用示例:
onExit(20, function() {
console.log('Mouse has left the top of the window!')
}
答案 4 :(得分:0)
为了检测mouseleave而不考虑滚动条和自动完成字段或检查:
document.addEventListener("mouseleave", function(event){
if(event.clientY <= 0 || event.clientX <= 0 || (event.clientX >= window.innerWidth || event.clientY >= window.innerHeight))
{
console.log("I'm out");
}
});
条件解释:
event.clientY <= 0 is when the mouse leave from the top
event.clientX <= 0 is when the mouse leave from the left
event.clientX >= window.innerWidth is when the mouse leave from the right
event.clientY >= window.innerHeight is when the mouse leave from the bottom
保持
event.clientY <= 0
如果您只想检测顶部的退出