Open
Description
问题描述
前置条件
- 使用了Angular页面缓存
- 使用了ResizeObserver监听zrender宿主dom尺寸,如果尺寸发生变化则调用zrenderIns.resize()
- 元素设置了culling: true
- 路由A: zrender绘制页面,路由B: 常规配置页面
复现步骤
2024-10-01.08.12.31.mov
- 第一次页面加载路由A,渲染没有问题
- 切换至路由B
- 切回路由A
- 绘制元素消失
问题分析
refresh执行中会判断元素如果设置为culling则会判断是否在可视区域中,不在则不会渲染。而之前切换页面时会导致zrender宿主dom的尺寸变为长宽为0, 所以无论如何判断元素都不会渲染
而调用resize函数后, 源码确实会计算当前视窗尺寸但是没有设置_width 和 _height 这两个私有属性
Lines 870 to 884 in 247e119
这段代码会使用_width和_height
Lines 413 to 440 in 247e119
Line 215 永真
zrender/src/graphic/Displayable.ts
Lines 208 to 223 in 247e119
可能方案
前置
Lines 883 to 884 in 247e119
临时方案
再调用一遍refrsh(true)进行全部刷新 😭
(this.zrenderIns.painter.refresh as EtSafeAny)(true); Ts 语法还报错 可以的话这玩意也修复下
Metadata
Assignees
Labels
No labels