针对文档的mouseleave事件,考虑了Chrome错误

问题描述 投票:1回答:1

我需要安全地检测鼠标何时离开窗口。我有jQuery包含,所以通常情况下会这样:

$(document).on("mouseleave", function(event) {
  doSomething();
});

但是,目前Chrome中有一个major bug,当点击元素时,这个mouseleave函数会随机激发。

通常,有一个简单的解决方法:

$("#some-id").on("mouseleave", function(event) {
  var e        = event.originalEvent;
  if (!e.relatedTarget || !e.toElement) {
    // BUG in Chrome
    return;
  }
  doSomething();
}

但是,这对于document或鼠标离开窗口时的任何元素都不起作用,因为在这种情况下,e.relatedTargete.toElement与bug发生时完全相同。因此,我正在尝试提出一些能够安全地确定Chrome正在执行的操作,以及何时实际应该触发mouseleave事件的内容。

更新:刚尝试使用mouseout的方法。同样的chrome bug也影响了这个事件,所以没有好处。 :/

javascript jquery google-chrome
1个回答
0
投票

现在,这是我提出的解决方案。希望有一天Chrome中的这个主要错误得到足够的重视以获得修复。

如果mouseleave作为一个错误发生,它通常几乎立即由mouseenter事件。所以我在这里做的只是在mouseleave事件后等待1/10秒,以确保它不是Chrome侥幸。

var documentMouseLeaveTimeout = null;
$(document).on("mouseleave", function() {
  documentMouseLeaveTimeout = setTimeout(function() {
    doSomething();
  }, 100);
});

$(document).on("mouseenter", function() {
  clearTimeout(documentMouseLeaveTimeout);
});

仍然希望有更好的答案。

© www.soinside.com 2019 - 2024. All rights reserved.