Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中模拟在定义的x,y坐标处的单击?_Javascript_Html_Dom - Fatal编程技术网

如何在JavaScript中模拟在定义的x,y坐标处的单击?

如何在JavaScript中模拟在定义的x,y坐标处的单击?,javascript,html,dom,Javascript,Html,Dom,使用事件api,可以创建合成MouseeEvent,并通过DOM元素以编程方式对其进行调度 通过向文档添加事件侦听器,可以在冒泡阶段捕获子元素发送的事件 即: 是否可以通过编程方式从父元素分派MouseeEvent或PointerEvent,并使事件经过捕获阶段,并在鼠标事件的坐标下触发子元素的事件侦听器?我的原始问题似乎没有得到正确的模拟。我的错误是假设在DOM树中传播事件的方法是让文档分派它。 我的问题应该是这样表述的:“如何在JavaScript中使用x,y坐标来模拟点击?”。我找到了答

使用事件api,可以创建合成MouseeEvent,并通过DOM元素以编程方式对其进行调度

通过向文档添加事件侦听器,可以在冒泡阶段捕获子元素发送的事件

即:


是否可以通过编程方式从父元素分派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)