尝试了很多关于UI的东西。无透明度的面板在没有透明度时不能正常工作,因为它们会阻挡游戏视图,并且当面板背景色与背景颜色相似时,显示小图标的频率会降低。没有“裁剪”效果的透明度会导致面板重叠时无法阅读。

发生的事情是:

每个打开的面板会自动使用SVG亮度遮罩来裁剪自己,遮罩的孔是来自每个更高层级面板的重叠矩形的并集——在显示/隐藏/拖拽/重绘/ MutationObserver 中重新计算一次,确保下层面板保持可读。纯JavaScript + 每个面板一个单独的遮罩图像数据 URI,GPU合成的方式使其在面板大小时几乎免费。