是否可以创建自定义事件变量并将其通过click()传递?

时间:2018-11-13 20:37:52

标签: javascript

目前正在开发一款游戏。

当您手动单击特定对象时,使用event.clientXevent.clientY,粒子会飞到您单击它的位置。

我正在实现一项功能,您可以在其中创建“工人”并将其设置为每隔几秒钟单击一次的特定x,y坐标。

目前我正在做这样的事情:

let el = document.elementFromPoint( x, y )
el.click()

但是,这样做的缺点是它没有附加包含x的事件,并且y的坐标与常规click事件一样。有办法传递吗?

编辑:

所以可以说,每当您单击div.square时,粒子就会出来。

我在div.square上有一个点击事件监听器,看起来像这样:

square.onclick = ( event ) => {
  create_particles( event )
}

如果我要通过执行click()模拟一次点击,则会触发square.onclick,但是event参数将为空。有办法以某种方式通过这些坐标吗?

1 个答案:

答案 0 :(得分:0)

也许您可以创建一个事件对象,用clientXclientY的必要值填充该事件对象,然后将该对象传递给create_particles()

因此,与此类似:

// let el = document.elementFromPoint( x, y )
// el.click()

// Create an event object, and populate clientX/clientY fields with x/y
var event = new MouseEvent('click', {
    clientX: x,
    clientY: y
});

// Invoke create_particles with your event object
create_particles( event )

或者,您可以在注册dispatch侦听器的DOM元素上click事件,通过执行以下操作来触发click事件逻辑:

var event = new MouseEvent('click', {
    clientX: x,
    clientY: y
});

// Cause the 'click' event to be invoked on the square DOM element
square.dispatchEvent(event);