如何在JavaScript中模拟在定义的x,y坐标处的单击?
使用事件api,可以创建合成MouseeEvent,并通过DOM元素以编程方式对其进行调度 通过向文档添加事件侦听器,可以在冒泡阶段捕获子元素发送的事件 即:如何在JavaScript中模拟在定义的x,y坐标处的单击?,javascript,html,dom,Javascript,Html,Dom,使用事件api,可以创建合成MouseeEvent,并通过DOM元素以编程方式对其进行调度 通过向文档添加事件侦听器,可以在冒泡阶段捕获子元素发送的事件 即: 是否可以通过编程方式从父元素分派MouseeEvent或PointerEvent,并使事件经过捕获阶段,并在鼠标事件的坐标下触发子元素的事件侦听器?我的原始问题似乎没有得到正确的模拟。我的错误是假设在DOM树中传播事件的方法是让文档分派它。 我的问题应该是这样表述的:“如何在JavaScript中使用x,y坐标来模拟点击?”。我找到了答
是否可以通过编程方式从父元素分派MouseeEvent或PointerEvent,并使事件经过捕获阶段,并在鼠标事件的坐标下触发子元素的事件侦听器?我的原始问题似乎没有得到正确的模拟。我的错误是假设在DOM树中传播事件的方法是让文档分派它。 我的问题应该是这样表述的:“如何在JavaScript中使用x,y坐标来模拟点击?”。我找到了答案 文档上有一个方便的elementFromPoint方法,它返回指定位置下的元素,因此无需遍历DOM树并手动对元素执行命中测试 这里需要做的是:
const simulateClick = (x, y) => {
const event = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: true,
screenX: x,
screenY: y
})
const element = document.elementFromPoint(x, y)
element.dispatchEvent(event)
}
simulateClick(32, 32)
您已经知道如何创建和调度人工事件。将事件重新分派到子元素。请记住,如果子元素最初没有捕获它,它可能不会再次捕获它。@Ourobrus问题是,当事件由文档或任何父元素发送时,它不会触发子元素上的事件侦听器,因此与用户在确定的位置单击时不完全相同。我想可以遍历DOM树并手动执行命中测试,但我认为有一种方法可以让浏览器像用户单击一样执行。
const simulateClick = (x, y) => {
const event = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: true,
screenX: x,
screenY: y
})
const element = document.elementFromPoint(x, y)
element.dispatchEvent(event)
}
simulateClick(32, 32)