当鼠标通过jquery从页面顶部离开时检测

时间:2009-10-24 11:35:15

标签: javascript jquery cross-browser

这个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.我不知道为什么这样正在考虑相同的浏览器。有没有人知道如何调试这个,或者另一个更可靠的方法来检测鼠标何时通过顶部退出网页?我希望这是有道理的。

5 个答案:

答案 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 

如果您只想检测顶部的退出