【问题标题】:How to know whether the mouse is inside the window?如何知道鼠标是否在窗口内?
【发布时间】:2013-05-29 16:03:20
【问题描述】:

我似乎找不到答案。

我有一个mouseleave 事件,我想在其中检查,当事件触发时,鼠标当前是否在窗口内(如果不是,它可以是浏览器的标签栏,后退按钮,等)。

    var cursorInPage = false;
$(window).on('mouseout', function() {
    cursorInPage = false;
});
$(window).on('mouseover', function() {
    cursorInPage = true;
});
$('#some_element').on("mouseleave",function(){
  if(cursorInPage === true){
     //Code here runs despite mouse not being inside window
    }
 });

我可以绑定到窗口mouseleave 事件吗?如果您离开文档/窗口的外部范围,是否会触发此类事件?上面的代码有问题,因为我相信元素的 mouseleave 在窗口之前触发

【问题讨论】:

标签: javascript jquery mouseleave


【解决方案1】:

我不太确定您要我们为“在这里写什么?”输入什么内容,但您可以简单地设置一个布尔值:

var cursorInPage = false;
$(window).on('mouseout', function() {
    cursorInPage = false;
});
$(window).on('mouseover', function() {
    cursorInPage = true;
});

然后使用该布尔值继续:

if (cursorInPage === true) {
    alert('Woo, the cursor is inside the page!');
}

这是一个example JSFiddle,它会在光标进入或离开窗口区域时更改正文背景颜色,在查看full-screen result 时会更好地显示。

【讨论】:

  • 这在小提琴中有效,但在我的代码中无效......我已经编辑了问题
  • 您是否收到任何控制台错误?您可能使用的是低于 1.7 的 jQuery 版本(意味着不支持 on()) - 尽管您的问题使用了它,所以我认为它是。
  • 不,我正在使用新版本。问题是元素 mouseout 事件在第一个窗口之前触发。
  • 根据您编辑的问题,如果#some_element 在您的window 范围内,cursorInPage 肯定会始终为真。您的光标将离开该元素,但仍会在 window 内。
  • 问题是元素在右上角,所以当用户在屏幕边框上时有时会发生鼠标离开。
【解决方案2】:

刚刚测试了这个希望它有所帮助。这是jsFiddle

$(document,window,'html').mouseleave(function(){alert('bye')}).mouseenter(function(){alert('welcome back!')})

【讨论】:

  • +1 for your question 实际上只在需要时触发,但我仍然遇到另一个事件首先触发的问题。
  • 你说的是#some_element吗?
  • 你能建一个快速的jsfiddle来查看
  • 是的,但是在“再见”之前会显示“4”警报。
  • 不是 :) 我的元素确实位于顶部:0 对:0,要解决它,您只需移动它一点,仍然没有真正解决它,但没关系,谢谢,我只是添加了一个延迟,这有点解决了我的问题。
【解决方案3】:

你可以试试:

$('body').mouseout(function() {
alert('Bazzinga...');
});

$(window).mouseleave(function() {
alert('Bazzinga...');
});

【讨论】:

  • 这更像是一个评论而不是一个答案。
  • 没有。他在询问事件是否可靠地触发。您已经说过“这是挂钩事件的方法”。从他的代码中,很明显他知道如何挂钩事件。
  • 和millind,body和window事件的问题是元素的mouseleave在window之前触发
【解决方案4】:

当鼠标在元素内时

$('#outer').mouseover(function() {
  $('#log').append('<div>Handler for .mouseover() called.</div>');
});

当鼠标离开元素时

$('#outer').mouseleave(function() {
  $('#log').append('<div>Handler for .mouseleave() called.</div>');
});

【讨论】:

  • 什么是外层,什么是日志?
  • 我知道如何绑定鼠标悬停事件,试图找出如何检测鼠标是否在窗口中
  • @MilindAnantwar #outer 和 #log 可以是任何元素(比如说 div)id 当有人将鼠标悬停在 div 上(具有外部 id)时触发此事件。
  • @eric.itzhak 我明白你的问题,你可以用“body”替换“#outer”$('body').mouseleave(function() {
  • @eric.itzhak 检查这个链接我认为这个问题已经解决了! jquery-javascript-check-if-mouse-is-in-or-out-window
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
相关资源
最近更新 更多