You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Autodesk DataViz.MOUSE_CLICK事件仅触发一次的问题求助

Sprite点击事件仅触发一次的原因分析及解决思路

首先注意到一个明显的代码问题:你声明要监听的是DATAVIZ_OBJECT_CLICK事件,但实际代码里绑定的是dataVizCore.MOUSE_CLICK——这两个事件的触发逻辑完全不同,MOUSE_CLICK是针对viewer全局的鼠标点击,而DATAVIZ_OBJECT_CLICK才是专门针对DataViz对象(比如Sprite)的点击事件,事件类型不匹配大概率是导致触发异常的核心原因。

除此之外,回调仅触发一次通常还有以下几种可能:

  • 监听器被意外移除:检查代码其他部分是否调用了viewer.removeEventListener移除了该回调,或者在回调内部存在移除自身的逻辑。
  • 自定义事件干扰:你在回调里触发了自定义事件dispatchEvent(e),如果这个事件的处理逻辑中存在阻止事件冒泡、修改页面DOM结构或干扰viewer事件循环的操作,可能会导致后续点击事件无法正常捕获。建议先注释掉这部分代码测试。
  • Sprite状态变更:如果点击后Sprite被隐藏、销毁,或者被设置为不可交互(比如修改了interactive属性),后续点击自然不会触发事件。检查Sprite渲染逻辑,确认点击后其状态未被修改。
  • 层级遮挡问题:确保Sprite没有被其他DOM元素或3D对象遮挡,导致后续点击无法命中目标。

修正后的测试代码

const dataVizCore = Autodesk.DataVisualization.Core;
function onSpriteClicked(event) {
  console.log(event, 'sprite clicked');
  // 先注释自定义事件,排查是否是它导致的问题
  // const e = new Event('lol', { payload: 'payload' });
  // dispatchEvent(e);
}
console.log('event registered');
// 替换为正确的事件类型
viewer.addEventListener(dataVizCore.DATAVIZ_OBJECT_CLICK, onSpriteClicked);

排查步骤建议

  1. 先修正事件类型为DATAVIZ_OBJECT_CLICK,测试是否能多次触发回调。
  2. 注释掉自定义事件部分,验证是否恢复正常。
  3. 检查Sprite点击后的状态,确保其保持可交互且可见。
  4. 查看浏览器控制台是否有报错,排除其他代码的逻辑干扰。

内容的提问来源于stack exchange,提问作者Adarsh Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:55:38