tdesign-react icon indicating copy to clipboard operation
tdesign-react copied to clipboard

fix(popup): fix popup positioning issue with React Flow pan and zoom

Open FlowerBlackG opened this issue 2 months ago • 4 comments

fix #3851

🤔 这个 PR 的性质是?

  • [x] 日常 bug 修复
  • [ ] 新特性提交
  • [ ] 文档改进
  • [ ] 演示代码改进
  • [ ] 组件样式/交互改进
  • [ ] CI/CD 改进
  • [ ] 重构
  • [ ] 代码风格优化
  • [ ] 测试用例
  • [ ] 分支合并
  • [ ] 其他

🔗 相关 Issue

#3851

💡 需求背景和解决方案

https://github.com/user-attachments/assets/73e2164c-c59c-4235-8cc7-41bca8bb47a9


解决方案

  1. 监听用户鼠标事件。鼠标事件开始时每帧检测位置变化;鼠标事件结束后取消监听;
  2. 针对 React Flow,监听其 viewport style 变化。

📝 更新日志

  • fix(Popup): 修复内层组件位置变化时浮窗无法跟随移动的问题。

  • [x] 本条 PR 不需要纳入 Changelog

☑️ 请求合并前的自查清单

⚠️ 请自检并全部勾选全部选项。⚠️

  • [x] 文档已补充或无须补充
  • [x] 代码演示已提供或无须提供
  • [x] TypeScript 定义已补充或无须补充
  • [x] Changelog 已提供或无须提供

FlowerBlackG avatar Sep 28 '25 13:09 FlowerBlackG

tdesign-react-demo

npm i https://pkg.pr.new/tdesign-react@3852

commit: 4e4ebd0

pkg-pr-new[bot] avatar Sep 28 '25 13:09 pkg-pr-new[bot]

完成

github-actions[bot] avatar Sep 28 '25 13:09 github-actions[bot]

「对 React Flow 的特殊适配」👀 这个不应该是组件库底层应该维护的事情噢 否则一大堆第三方库,难道都要适配吗 (?) 建议把监听逻辑放到自己的业务项目代码里 理论上外部也可以拿到 triggerref

但是这个问题是由于 popperjs 使用了 absolute 位置产生的,或许属于 popperjs 的某种设计缺陷?

FlowerBlackG avatar Sep 29 '25 04:09 FlowerBlackG

也不能完全说是缺陷吧 🤔 它就是“故意”没有兼容的 可拖拽画布这种场景...一般也很少在画布上使用组件库 or popperjs 应该会有更成熟的业务方案,感觉通常需要大量的手动封装

image

RylanBot avatar Sep 29 '25 07:09 RylanBot