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

如何在Autodesk Viewer选择事件回调内调用select不触发SELECTION_CHANGED_EVENT?

问题解答

当然可以!Autodesk Forge Viewer的viewer.select()方法本身就支持控制是否触发SELECTION_CHANGED_EVENT事件,不用靠setTimeout也能彻底解决无限循环的问题。

关键解决办法

调用viewer.select()的时候,给第三个参数传个配置对象,把notify设为false,这样执行选择操作就不会触发选择变更事件,回调函数也就不会反复被调用了。

修改后的代码

viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, () => {
    // 合并需要保留的选中项和当前选中项,去重
    const targetIds = [...new Set([
        ...itemsThatShouldRemainSelected,
        ...viewer.getSelection()
    ])];
    // 配置notify: false,禁止触发选择变更事件
    viewer.select(targetIds, undefined, { notify: false });
    console.log('SELECTION_CHANGED_EVENT');
});

注意事项

  • 如果你的Viewer版本比较老,可能需要把第三个参数换成skipSelectionChangedEvent: true(早期版本用这个字段控制),根据自己的实际版本调整就行。
  • 直接去掉setTimeout,逻辑更顺畅,也不会有延迟执行的问题,从根源上避免了无限循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:28:17