如何检测任意鼠标位置(x,y)上的元素?

3

可能重复:
获取指定位置的元素 - JavaScript

如何检测任意鼠标位置(x,y)处的元素?

我正在使用 mouseenter/mouseleave 来突出显示悬停的项目。不幸的是,当鼠标隐式移动时,这些事件都不会触发,导致错误的项目被突出显示。 隐式移动鼠标的示例包括使用箭头键或触摸板滚动页面。

您可以在此处查看带有注释的工作演示: http://jsfiddle.net/bkG2K/6/

我的解决方法是每隔一段时间检查一次鼠标位置,或者尽可能在滚动后更新悬停状态,并根据当前鼠标坐标更新悬停状态。 但是我不确定如何根据X,Y查找DOM元素。

有什么想法吗? 如果您有更好的解决方案,请随意提出!

2个回答

1

您可以使用本地JavaScript elementFromPoint(x, y)方法,在视口中返回坐标x,y处的元素。

请参见elementFromPoint w3c draft

以下是代码示例:

<html>
<head>
<title>elementFromPoint example</title>

<script type="text/javascript">

function changeColor(newColor)
{
 elem = document.elementFromPoint(2, 2);
 elem.style.color = newColor;
}
</script>
</head>

<body>
<p id="para1">Some text here</p>
<button onclick="changeColor('blue');">blue</button>
<button onclick="changeColor('red');">red</button>
</body>
</html>

您可以使用setInterval()来持续检查元素的悬停事件,但这并不推荐,尝试使用.hover(...)和CSS来提高应用程序的性能。


0

我不知道内部实现是否有所不同,但对于您想要实现的内容,推荐使用 .hover(...) 方法,该方法需要两个回调函数来在每个状态更改时执行。

或者,您可以使用 setInterval() 并在光标位置模拟 .mousemove() 事件(尽管您应该进行浏览器检查,并仅在有问题的浏览器中使用它,因为这是一种 hack,尽可能少的人应该接触到它)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接