【发布时间】:2015-03-08 20:06:42
【问题描述】:
我用三个.js 创建了一个应用程序,有 2 个渲染器(1 个画布和 1 个 div(css 渲染器))。 css 渲染器位于画布顶部,我想将任何类型的事件传递给后面的画布元素。到目前为止,我未能创建调度程序...
到目前为止我所尝试的:
1)
// on top element css renderer
$(this.cssRenderer.domElement).on("click mousedown mouseup mousemove focus blur keydown keyup change touchstart touchend touchmove", function ( event ) {
event.preventDefault();
event.stopImmediatePropagation();
//canvas background domelement
$(that.renderer.domElement).trigger(event);
});
2)
$(this.cssRenderer.domElement).on("click mousedown mouseup mousemove focus blur keydown keyup change touchstart touchend touchmove", function ( event ) {
event.preventDefault();
event.stopImmediatePropagation();
that.renderer.domElement.dispatchEvent(event.originalEvent);
});
如果情况 2 我收到以下错误:
未捕获的 InvalidStateError:无法执行“dispatchEvent” 'EventTarget': 事件已被调度。
我也尝试在一段时间后复制对象或传递它,但似乎没有任何效果。 我还没有做过类似的事情,所以我需要一些帮助或指导。
【问题讨论】:
-
为什么不删除 stopPropagation 并让它传播?您只需要 cssrenderer 是您设置画布的元素的子元素(或后代)
-
我已经尝试将 dispatchEvent 调用放入 setTimeout,它可以防止该错误。但由于某种原因,它似乎没有正确调度事件。它的父节点收到了事件,但我派发到的节点没有收到。
标签: javascript jquery three.js