@@ -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