【发布时间】:2018-05-15 02:17:32
【问题描述】:
我想在 两个 层上捕获鼠标事件:PIXI 的画布和覆盖 div。我有以下类型的 HTML 设置,其中div.overlay 高于canvas.pixi:
<div class="parent">
<canvas class="pixi"></canvas>
<div class="overlay"></div>
</div>
当canvas 位于顶部时,PIXI 交互工作正常,但当画布被div.overlay 覆盖时,我无法捕获任何事件。
我发现setTargetElement 似乎可以让我们为捕获元素定义 DOM 元素,我尝试像这样使用它:
const renderer = PIXI.autoDetectRenderer(...);
renderer.plugins.interaction.setTargetElement(document.querySelector('.overlay'));
使用这种技术,我能够捕获mousemove 事件,但不幸的是click、mousedown 等不起作用。
我还尝试复制在div.overlay 上捕获的原始事件并复制并在canvas 上调度事件,如下所示,但这也不起作用。
document.querySelector('.overlay').addEventListener('mousedown', (e) => {
const eventCopy = document.createEvent('MouseEvents');
eventCopy.initMouseEvent(
e.type, e.bubbles, e.cancelable, e.view,
e.detail, e.pageX || e.layerX,
e.pageY || e.layerY, e.clientX,
e.clientY, e.ctrlKey, e.altKey, e.shiftKey,
e.metaKey, e.button, e.relatedTarget
);
document.querySelector('.pixi').dispatchEvent(eventCopy);
});
有什么方法可以在覆盖的 DOM 元素上捕获鼠标事件并将这些事件传递给 PIXI?
为什么?
我想与 PIXI 元素交互,同时能够利用 D3 的缩放和画笔功能,目前正在覆盖 div 上处理。
更新和代码示例
我设法转发事件,除点击事件外,所有事件都由 PIXI 注册。点击事件可以通过重新触发pointerdown 和pointerup 事件来手动触发。查看https://jsfiddle.net/v3chhhjk/1/
【问题讨论】:
标签: javascript mouseevent pixi.js