如何在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
相关产品推荐
相关产品推荐

