Autodesk Forge v7.*工具栏resize事件调用viewer.resize无效求助
解决Autodesk Forge Viewer resize事件不生效的问题
问题分析
你的代码存在两个关键问题:
- 事件回调中使用普通
function导致this指向错误,无法正确访问this.forge2DView实例 - 监听的是Viewer内部的
resize事件,而非窗口(或容器)的大小变化事件,无法触发预期的工具栏调整
修正方案
- 使用箭头函数保证回调中的
this指向类实例,或者提前保存Viewer实例到变量中 - 监听
window的resize事件(如果是容器大小变化则监听容器的resize事件),在事件触发时调用Viewer的resize()方法
修正后的代码示例:
// 初始化Viewer this.forge2DView = new Autodesk.Viewing.Private.GuiViewer3D(document.getElementById('drawingCanvas'), { extensions: ['Autodesk.DocumentBrowser'] }); // 监听window的resize事件,用箭头函数确保this指向正确 window.addEventListener("resize", () => { // 调用Viewer的resize方法,同步工具栏和视图大小 this.forge2DView.resize(); });
额外优化建议
- 为了避免频繁触发resize导致性能问题,可以添加防抖处理:
let resizeTimeout; window.addEventListener("resize", () => { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(() => { this.forge2DView.resize(); }, 200); // 200ms防抖延迟,可根据需求调整 });
- 确保容器
drawingCanvas的CSS设置正确(比如宽度/高度设为100%,避免固定尺寸导致无法自适应)
内容的提问来源于stack exchange,提问作者Soumya
相关产品推荐
相关产品推荐

