Skip to content

Commit c9b0206

Browse files
hotfix: sidebar issue
1 parent 1d2833b commit c9b0206

1 file changed

Lines changed: 18 additions & 18 deletions

File tree

site/.vitepress/theme/components/ResizableSidebar.vue

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,25 @@ function startDrag(side: Side, e: MouseEvent) {
4545
handle.classList.add('is-active')
4646
document.body.classList.add('rs-resizing')
4747
48-
// 左栏:sidebar 左缘在居中布局下非 0,新宽 = 鼠标x − 左缘
49-
const sidebarLeft =
50-
side === 'left'
51-
? (document.querySelector('.VPSidebar') as HTMLElement | null)?.getBoundingClientRect().left ?? 0
52-
: 0
48+
// 用「位移」而非「绝对坐标」算新宽度。居中布局(≥1440px)下 sidebar 容器 left:0 但视觉
49+
// nav 树因居中留白偏右,getBoundingClientRect/offsetLeft 都是容器几何、不代表 nav 树视觉
50+
// 位置,按绝对坐标算会多算居中偏移导致宽度暴涨(线上曾遮挡正文)。位移法与布局无关,恒正确。
51+
const startX = e.clientX
52+
const startWidth =
53+
parseInt(getComputedStyle(document.documentElement).getPropertyValue(dim.cssVar)) || dim.def
5354
5455
const onMove = (ev: MouseEvent) => {
55-
let v: number
56-
if (side === 'left') {
57-
v = ev.clientX - sidebarLeft
58-
} else {
59-
// 右栏:aside 右边缘固定(贴容器右内边),新宽 = 右边缘 − 鼠标 x
60-
const aside = document.querySelector('.VPDoc.has-aside .aside') as HTMLElement | null
61-
v = aside ? aside.getBoundingClientRect().right - ev.clientX : dim.def
62-
}
63-
if (drag) drag.lastV = clamp(Math.round(v), dim.min, dim.max)
64-
applyVar(side, drag ? drag.lastV : dim.def)
56+
const delta = ev.clientX - startX
57+
// 左栏:鼠标右移加宽;右栏:鼠标左移加宽(右栏左缘向左拖)
58+
const v = clamp(
59+
Math.round(side === 'left' ? startWidth + delta : startWidth - delta),
60+
dim.min,
61+
dim.max
62+
)
63+
if (drag) drag.lastV = v
64+
applyVar(side, v)
6565
if (side === 'left' && drag?.handle) {
66-
// handle 跟随 sidebar 右缘(左缘 + 当前宽)
67-
drag.handle.style.left = (sidebarLeft + drag.lastV) + 'px'
66+
drag.handle.style.left = ev.clientX + 'px' // handle 跟随鼠标(按下点在右缘,故 = 新右缘)
6867
}
6968
}
7069
const onUp = () => {
@@ -74,8 +73,9 @@ function startDrag(side: Side, e: MouseEvent) {
7473
document.removeEventListener('mousemove', onMove)
7574
document.removeEventListener('mouseup', onUp)
7675
drag = null
76+
if (side === 'left') updateLeftPosition() // 拖动结束重新精确对齐(offsetLeft+offsetWidth)
7777
}
78-
drag = { side, dim, lastV: dim.def, handle, onMove, onUp }
78+
drag = { side, dim, lastV: startWidth, handle, onMove, onUp }
7979
document.addEventListener('mousemove', onMove)
8080
document.addEventListener('mouseup', onUp)
8181
}

0 commit comments

Comments
 (0)