【发布时间】:2021-03-11 18:35:27
【问题描述】:
使用事件 api,可以创建合成的 MouseEvent 并通过 DOM 元素以编程方式调度它。
通过在文档中添加事件监听器,可以在冒泡阶段捕获子元素调度的事件。
即:
const element = document.createElement('div')
element.style.background = '#ff0000'
element.style.width = '200px'
element.style.height = '200px'
document.body.appendChild(element)
document.addEventListener('click', event => {
console.log('Clicked on child element')
console.log(event)
})
const clickEvent = new MouseEvent('click', {
bubbles: true,
cancellable: true,
clientX: 32,
clientY: 32,
})
element.dispatchEvent(clickEvent)
是否可以通过编程方式从父元素调度 MouseEvent 或 PointerEvent 并让事件经过捕获阶段并在鼠标事件的坐标下触发子元素的事件侦听器?
【问题讨论】:
-
您已经知道如何创建和调度人工事件。将事件重新分派给子元素。请记住,如果孩子最初没有捕捉到它,它可能不会再次捕捉到它。
-
@Ouroborus 问题是,当事件由文档或任何父元素调度时,它不会触发子元素上的事件侦听器,因此它与用户单击时并不完全相同确定的位置。我想可以遍历 DOM 树并手动执行命中测试,但我认为有一种方法可以让浏览器像用户点击一样执行此操作。
标签: javascript html dom