如何检查鼠标是否仍在 Javascript 中的元素上

use*_*311 13 javascript jquery

我想写入控制台的是用户将鼠标悬停在某个元素上超过 2 秒,这是代码:

var $els = document.querySelectorAll('#myDiv');
    for(i = 0; i < $els.length; i++) {
        if ($($els[i]).data('track') == 'hover') {
            $els[i].addEventListener('mouseover', function (e) {
                setTimeout(function() {
                    if ($($els[i]).is(':hover')) {
                        console.log('mouse is still over this element');
                    }
                }, 2000);
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)

即使我将鼠标放在元素上的时间少于 2 秒,该消息也会在 2 秒后写入控制台。我可能在这里遗漏了一些东西:

if ($($els[i]).is(':hover')) {
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助

Sau*_*wal 18

创建一个全局变量作为

var isMouseHover = false;

鼠标悬停时调用函数 调用鼠标悬停函数并设置

isMouseHover = true;

并调用mouseout,当鼠标移出并设置

isMouseHover = false;

每当你需要的时候就可以使用这个isMouseHover变量。

尝试这个:

let isMouseHover = false
let test = document.getElementById("test");
test.addEventListener("mouseleave", function (event) {
  isMouseHover = false
  event.target.textContent = "mouse out"
  console.log(isMouseHover)
}, false);
test.addEventListener("mouseover", function (event) {
  isMouseHover = true
  event.target.textContent = "mouse in"
  console.log(isMouseHover)
}, false);
Run Code Online (Sandbox Code Playgroud)
  <div id="test">hover me</div>
Run Code Online (Sandbox Code Playgroud)

  • 这是完成工作的非常好的且直接的策略! (2认同)

Jum*_*mbo 12

所有现代浏览器都提供了一个更简单的解决方案。

var element = document.querySelector('#myElement');

if (element.matches(':hover')) {
    console.log('Mouse is over the element now.');
}
Run Code Online (Sandbox Code Playgroud)

  • 如此智能和简单,喜欢它 (3认同)

Nic*_*co_ 1

编辑:我用更好的解决方案更新了我之前的答案。

首先,你可能有几个具有相同 id 的元素,这是一件坏事,所以我改为一个类。然后我更新了您的代码以简化它并使其更加符合 jQuery 的精神:

HTML:

<div class="myDiv" data-track='hover'>
test
</div>
<div class="myDiv" data-track='hover'>
test2
</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript:

$('.myDiv[data-track=hover]').on("mouseenter",function(){
    var $elem = $(this);
  $elem.attr("data-hover",true);
  window.setTimeout(function() {
    if ($elem.attr("data-hover")) {
        console.log('mouse is still over this element');
        console.log($elem);
    }
  }, 2000);
})

$('.myDiv[data-track=hover]').on("mouseenter",function(){
  $(this).attr("data-hover",false);
});
Run Code Online (Sandbox Code Playgroud)

这是一个工作的jsFiddle