fix: positioned element offset when containing block has transform #1368
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #1364
修复当 positioned element 的 containing block 有 transform 时,positioned element 的定位错误加上了 transform 的值。
原因:当 positioned element 无 top/bottom 或者 left/right 时,其定位应使用 renderPositionPlaceholder 的 offset,renderPositionPlaceholder 相对于 parent 的定位使用的是 localToGlobal 来计算,而 localToGlobal 使用的是 applyPaintTransform,paint transform 中又包含了 transform offset,导致 issue 中的例子错误了加上 parent 的 transform offset。同理 element 上的 offsetTop 与 offsetLeft API 的实现由于也使用 localToGlobal 也会有相同问题。
fix: 针对上面两种 case 定义一个新的方法
getOffsetToAncestor
,positioned element 的定位需要考虑 layout offset 与 scroll offset,而 offsetTop 与 offsetLeft API 只需要考虑 layout offset,与 scroll offset 无关。