【问题标题】:Is there a way to identify mouse leave specifically to the top in IE有没有办法专门识别鼠标离开 IE 的顶部
【发布时间】:2017-09-28 00:38:02
【问题描述】:

当用户尝试通过将鼠标移动到窗口顶部来离开页面时,我试图向他们显示弹出消息。

我遇到的问题是,似乎 Internet Explorer 无法专门针对鼠标移动到顶部的情况识别 mouseleave 事件。相反,它将指针坐标 clientX 和 clientY 设置为“-1”,在鼠标在窗口外移动到顶部、底部、左侧和右侧的所有情况下。

需要提及的是,如果将鼠标移到右侧窗口外(触发事件浏览器不应在全屏上最大化),它会不时将 clientY 设置为“-1”。如果您将鼠标向左/向右移动 20 次,您将获得 30% 的 clientY = '-1',其余的 % clientY 将包含适当的值。

我使用以下代码:

$(document).mouseleave(function(e){console.log("clientX: " + e.clientX + " clientY: " + e.clientY)});

有什么方法可以专门识别鼠标在顶部的离开吗?非常感谢您的任何回答:)

【问题讨论】:

  • 您是否有理由不想为此使用window.onbeforeunload?
  • 我记得几年前确切的坐标被混淆了(从 IE9 开始?),这是某种安全“改进”。您可以尝试收听mousemove 并存储您从该事件获得的坐标,可能会有一点延迟(当鼠标离开页面时,mousemove 坐标也会被混淆)。 @PaulAbbott 也许是因为当您将鼠标从浏览器窗口移开时,onbeforeunload 不会触发。
  • 感谢您的回复。 mousemove 的问题是 IE 也没有适当地计算 clientY 的位置。有时它显示 0,但有时值大于 0(例如 7、27 甚至 100。这取决于您移动鼠标的速度。速度越快,获得的值越大)。所以很难根据这个事件来判断客户是把鼠标移到了窗口的顶部还是只是把鼠标移到了页面的顶部(例如,将鼠标移到了标题或页面的菜单)

标签: javascript jquery internet-explorer


【解决方案1】:

可以用这个,IE对y的值有一些Off

if(navigator.userAgent.toLowerCase().indexOf("trident")>-1){
          document.captureEvents(Event.MOUSEMOVE)
          document.onmousemove = getMouseXY;
          var tempX = 0;
          var tempY = 0;


          function getMouseXY(e) {
            tempX = event.clientX + document.body.scrollLeft;
            tempY = (event.clientY + document.body.scrollTop);
            if(tempY <= 5)
                {
                   // your code will be here
                }
          }        
}

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多