是(":hover")仅在setInterval函数

时间:2015-05-11 19:55:45

标签: javascript jquery

请参阅https://jsfiddle.net/cot33dxa/



setInterval(function() {
  if ($("#one").is(":hover")) {
    $("#one").css("background-color", "red");
  } else {
    $("#one").css("background-color", "");
  }
}, 0);

if ($("#two").is(":hover")) {
  $("#two").css("background-color", "blue");
} else {
  $("#two").css("background-color", "");
}

#one {
  width: 200px;
  height: 200px;
  background-color: yellow;
}
#two {
  width: 200px;
  height: 200px;
  background-color: green;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="one"></div>
<div id="two"></div>
&#13;
&#13;
&#13;

为什么对于div来说,悬停检查工作得很好,而在div 2中却没有?

使用if ($('#element:hover').length != 0)(取自ivo's solution)时遇到同样的问题。

JS为此提琴:https://jsfiddle.net/q8dfLc6s/

在更一般的意义上,我正在寻找最简单,最可靠的方法来了解鼠标是否在JQuery 1.11.0中的div上。就目前而言,除了这个SetInterval奇怪之外,我甚至无法使用布尔检查。

4 个答案:

答案 0 :(得分:2)

你的小提琴的问题是你的第二次检查是在你的间隔功能之外。试试这个:

setInterval(function(){
    if($("#one").is(":hover")) {
        $("#one").css("background-color","red");
    }
    else {
        $("#one").css("background-color","");
    }

    if($("#two").is(":hover")) {
        $("#two").css("background-color","blue");
    }
    else {
        $("#two").css("background-color","");
    }

},0);

答案 1 :(得分:1)

第二个不起作用,因为它不在间隔计时器内,并且该代码仅在页面加载时运行

更改为

setInterval(function () {
    if ($("#one").is(":hover")) {
        $("#one").css("background-color", "red");
    } else {
        $("#one").css("background-color", "");
    }


    if ($("#two").is(":hover")) {
        $("#two").css("background-color", "blue");
    } else {
        $("#two").css("background-color", "");
    }

}, 0);

我不知道为什么你需要这个,不要只使用悬停事件或悬停css

DEMO

答案 2 :(得分:1)

好问题!通过将代码放在setInterval中,您实际上是在event loop中镜像浏览器在后台执行的操作。

通常应该避免这种行为,而是用实际事件代替。

在jQuery中,这看起来像是:

$('#element').on( 'hover', function (this, event) {
    $element = this;
    /*handle event*/
});

更多信息:https://api.jquery.com/on/

编辑:您运行的代码最好使用:hover选择器在CSS中完成:

#element {
    background-color: blue
}

#element:hover {
    background-color: red
}

答案 3 :(得分:0)

而不是在setInterval内移动代码: 你的第二个例子不起作用的原因是它只在页面加载后才会执行。另一方面,setInterval执行“0”工作&#39;。

但要实现您尝试做的事情,请考虑使用.hover(),因为它正在侦听将光标移入或移出选择器的实际事件,并且不会执行您的{{1阻止所有的时间:

else

jsfiddle