校准面板display:block时是否存在类FINISHED_CALIBRATION事件 自定义逗号分隔校准弹窗
问题答复
当calibration panel被设置为display: block唤起时,没有和FINISHED_CALIBRATION遵循完全同名规则、专门对应面板显示的独立事件,但你可以通过更稳定的方案实现自定义校准对话框替换,不需要依赖DOM类名轮询检测点位。
推荐实现方案
1. 监听校准实例状态变更事件(稳定性最高)
校准流程全生命周期的状态变更都会通过校准实例对外派发,你可以直接监听CALIBRATION_STARTED状态,该状态触发时机和你当前检测2个带editable类名校准点的时机完全一致,不会受DOM结构迭代影响:
// 从视图实例中获取校准模块实例,不同SDK的获取路径可参考对应初始化文档 const calibrator = viewer.getPlugin('calibration'); calibrator.on('stateChange', (currentState) => { // 校准启动、默认面板即将弹出的节点 if (currentState === 'CALIBRATION_STARTED') { // 阻止默认对话框渲染 calibrator.options.showDefaultDialog = false; // 唤起自定义的、支持逗号做小数分隔符的校准对话框 this.openCalibrationDialog(); } // 你已知的FINISHED_CALIBRATION事件也可以在同个监听里处理 if (currentState === 'FINISHED_CALIBRATION') { // 校准完成后的自定义逻辑 } })
2. 初始化时直接禁用默认对话框
如果你的场景支持在初始化阶段配置校准模块,可以直接关掉默认对话框的渲染开关,从根源上跳过默认弹窗逻辑:
const calibrator = new Calibrator({ // 其余初始化配置 dialog: { enable: false } }); // 监听校准启动动作,直接唤起自定义弹窗 calibrator.on('start', () => { this.openCalibrationDialog(); });
注意:你当前使用的DOM类名检测方案存在兼容风险,如果后续版本调整了
calibration-endpoint类名、或者改为分步加载点位,判断逻辑会直接失效,不建议长期使用。
自定义对话框的小数分隔符适配
在自定义对话框的数值提交逻辑中,只需要在传值给校准实例前做一次格式转换即可兼容逗号分隔符,避免数值解析报错:
// 从自定义输入框拿到用户输入的带逗号的小数值 const inputVal = (document.querySelector('#custom-cal-length') as HTMLInputElement).value; // 将逗号替换为点后转为数值类型 const realLength = Number(inputVal.replace(',', '.')); // 把真实长度传给校准实例完成计算 calibrator.setMeasureLength(realLength);
内容的提问来源于stack exchange,提问作者MiroV
相关产品推荐
相关产品推荐

