如何通过向上移动到地址栏来检测鼠标离开页面?

Ron*_*bet 4 javascript jquery jquery-events

我创建了一个jQuery事件,当访问者离开页面时会弹出一个对话框.我正在使用e.pageY来检测鼠标位置.当鼠标位于Y:小于2时,弹出对话框.问题是,当我向下滚动页面并决定离开页面时,弹出窗口没有显示,因为鼠标不在Y:小于2.我该如何解决这个问题.即当我离开页面并将鼠标悬停在地址栏上时,尽管向下滚动,仍会出现弹出窗口.

这里是我的代码和底部的工作示例.

var mouseLastYPos = null;
$(document).mousemove(function(e){ 
    if(mouseLastYPos){ 
        if (e.pageY < mouseLastYPos && e.pageY <= 2){

           $('#mystuff').show();

        }
    }
    mouseLastYPos = e.pageY;
});?
Run Code Online (Sandbox Code Playgroud)

工作实例:http://jsfiddle.net/bmHbt/

非常感谢你.

ank*_*itr 7

旧问题,但我想我也应该分享我的代码,也许有人觉得它很有用.

$(function(){
    var mouseY = 0;
    var topValue = 0;
    window.addEventListener("mouseout",function(e){
        mouseY = e.clientY;
        if(mouseY<topValue) {
            alert("Do something here!!!");
        }
    },
    false);
});
Run Code Online (Sandbox Code Playgroud)

JSFIDDLE链接


ifi*_*ime 5

这是我的实现: http: //jsfiddle.net/fq8HT/

它还尝试通过包含上次触发 mousemove 之间的差异来考虑快速移动鼠标的用户。

(function() {

  var current_scroll = 0;
  var last_mouse_y = null;

  $(document)
    .scroll(function() {
      current_scroll = $(this).scrollTop();
    })
    .mousemove(function(e) {
      var speed = last_mouse_y - e.pageY;
      var success_val = e.pageY - speed;

      if (success_val < last_mouse_y && success_val <= current_scroll) {
        $('#stop-leaving').show();
      } else {
        $('#stop-leaving').hide();
      }

      last_mouse_y = e.pageY;
    });

})();
Run Code Online (Sandbox Code Playgroud)