为了账号安全,请及时绑定邮箱和手机立即绑定

确定鼠标指针在Javascript顶部的哪个元素

确定鼠标指针在Javascript顶部的哪个元素

函数式编程 2019-11-13 09:48:45
我想要一个函数,该函数告诉我鼠标光标位于哪个元素上。因此,例如,如果用户的鼠标位于该文本区域(ID为wmd-input)上,则调用window.which_element_is_the_mouse_on()在功能上等同于$("#wmd-input")
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

有一个很酷的功能document.elementFromPoint,它听起来像什么。


我们需要找到鼠标的x和y坐标,然后使用这些值调用它:


var x = event.clientX, y = event.clientY,

    elementMouseIsOver = document.elementFromPoint(x, y);

document.elementFromPoint


查看完整回答
反对 回复 2019-11-13
?
繁星coding

TA贡献1797条经验 获得超4个赞

在较新的浏览器中,您可以执行以下操作:


document.querySelectorAll( ":hover" );

这将给您一个NodeList项,以鼠标顺序显示当前鼠标在文档上的位置。NodeList中的最后一个元素是最具体的,前面的每个元素都应该是父级,祖父母级,依此类推。


查看完整回答
反对 回复 2019-11-13
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

尽管以下内容可能并未真正回答该问题,希望它会提供一些额外的输入。


实际上,有两种方法可以获取鼠标当前所经过的所有元素的列表(也许对于较新的浏览器而言):


“结构”方法-升序DOM树

就像德曼的回答一样,


var elements = document.querySelectorAll(':hover');

但是,这假设只有子代会覆盖其祖先,通常是这种情况,但通常情况并非如此,尤其是在处理SVG时,DOM树的不同分支中的元素可能会相互重叠。


“视觉”方法-基于“视觉”重叠

此方法用于document.elementFromPoint(x, y)查找最顶层的元素,暂时将其隐藏(由于我们在相同的上下文中立即对其进行了恢复,因此浏览器将不会实际呈现该元素),然后继续查找第二个最顶层的元素...看起来有些跷,但是它返回您期望的结果,例如,树中的兄弟姐妹元素相互遮挡。请找到此帖子以获取更多详细信息,


function allElementsFromPoint(x, y) {

    var element, elements = [];

    var old_visibility = [];

    while (true) {

        element = document.elementFromPoint(x, y);

        if (!element || element === document.documentElement) {

            break;

        }

        elements.push(element);

        old_visibility.push(element.style.visibility);

        element.style.visibility = 'hidden'; // Temporarily hide the element (without changing the layout)

    }

    for (var k = 0; k < elements.length; k++) {

        elements[k].style.visibility = old_visibility[k];

    }

    elements.reverse();

    return elements;

}

尝试两者,并检查它们的不同收益。


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 409 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信