获取当前在鼠标下的元素,而不使用鼠标事件

Get element currently under mouse without using mouse events

本文关键字:鼠标 事件 获取 元素      更新时间:2023-09-26

WRT构建Firefox插件

是否有可能通过一些XPCOM或javascript方法获得鼠标下的元素?(请非js-ctypes,因为这需要操作系统的特殊性)

当用户按Ctrl + Shift + M时,我想检测鼠标下的内容。

现在,当用户按下这个热键时,我在文档中添加了一个mouseover监听器,所以当他移动鼠标时,我可以得到鼠标下面的元素,但不是当他按下热键组合时正好在鼠标下面的元素。

我只是查看了获取(或存储和提供)光标位置的源代码。我没有找到任何可以使用的东西(来自Javascript或XPCOM)。我可能错过了什么……MXR是你的朋友。

然而,如果你想避免mousemove(这通常是一个好主意),你可以只寻找最里面的悬停元素,例如:

function getInnermostHovered() {
    var n = document.querySelector(":hover");
    var nn;
    while (n) {
        nn = n;
        n = nn.querySelector(":hover");
    }
    return nn;
}

(小提琴演示原理)

虽然这是我认为一个黑客,它似乎工作足够好大多数时间,但将失败,如果元素有鼠标事件通过pointer-events禁用。可能还有其他我没有想到的问题……

当然,当文档中没有悬停元素时(例如,鼠标实际上不在文档中),这可能什么也不返回。