Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/hooks/useTarget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export default function useTarget(
const updatePos = useEvent(() => {
if (targetElement) {
// Exist target element. We should scroll and get target position
if (!isInViewPort(targetElement) && open) {
if (!inlineMode && !isInViewPort(targetElement) && open) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

修复了内联模式下的无限滚动循环问题,很好的改动!

此更改通过添加!inlineMode条件解决了一个关键问题。在内联模式下,元素的位置计算与常规模式不同(相对于父元素计算),之前的代码在内联模式下也会尝试滚动元素到视图中,这可能导致:

  1. 滚动触发 ->
  2. 触发scroll事件 ->
  3. 再次执行updatePos ->
  4. 元素仍然"不在视口中"(因为inline模式计算方式不同)->
  5. 再次触发滚动

从而形成死循环。此修复正确地阻止了内联模式下的自动滚动行为。

targetElement.scrollIntoView(scrollIntoViewOptions);
}

Expand Down