@@ -9,14 +9,25 @@ interface SelectionBorderProps {
99 canvasOffsetX : number ;
1010 pinned : boolean ;
1111 onHandleMouseDown : ( e : React . MouseEvent , key : HandleType ) => void ;
12+ /**
13+ * 移动模式下边框的屏幕绝对位置(fixed 定位基准)。
14+ * 非移动模式下为 null,此时使用相对于 Editor 容器的 absolute 定位。
15+ */
16+ fixedOrigin ?: { x : number ; y : number } | null ;
1217}
1318
1419const SelectionBorder : React . FC < SelectionBorderProps > = ( {
1520 currentSel,
1621 canvasOffsetX,
1722 pinned,
1823 onHandleMouseDown,
24+ fixedOrigin,
1925} ) => {
26+ // 移动模式:用 fixed + 屏幕绝对坐标;否则用 absolute + 相对容器坐标
27+ const useFixed = Boolean ( fixedOrigin ) ;
28+ const originX = fixedOrigin ? fixedOrigin . x : 0 ;
29+ const originY = fixedOrigin ? fixedOrigin . y : 0 ;
30+
2031 const handles : { key : HandleType ; x : number ; y : number } [ ] = [
2132 { key : "nw" , x : canvasOffsetX + 0 , y : 0 } ,
2233 { key : "n" , x : canvasOffsetX + currentSel . w / 2 , y : 0 } ,
@@ -38,10 +49,10 @@ const SelectionBorder: React.FC<SelectionBorderProps> = ({
3849 "0 0 0 1.5px rgba(0,0,0,0.5), 0 4px 24px rgba(0,0,0,0.6), inset 0 0 12px rgba(0,0,0,0.25)" ,
3950 boxSizing : "border-box" ,
4051 height : currentSel . h ,
41- left : canvasOffsetX ,
52+ left : useFixed ? originX + canvasOffsetX : canvasOffsetX ,
4253 pointerEvents : "none" ,
43- position : "absolute" ,
44- top : 0 ,
54+ position : useFixed ? "fixed" : "absolute" ,
55+ top : useFixed ? originY : 0 ,
4556 width : currentSel . w ,
4657 zIndex : 21 ,
4758 } }
@@ -61,9 +72,13 @@ const SelectionBorder: React.FC<SelectionBorderProps> = ({
6172 boxSizing : "border-box" ,
6273 cursor : getHandleCursor ( key ) ,
6374 height : HANDLE_SIZE + 4 ,
64- left : x - ( HANDLE_SIZE + 4 ) / 2 ,
65- position : "absolute" ,
66- top : y - ( HANDLE_SIZE + 4 ) / 2 ,
75+ left : useFixed
76+ ? originX + x - ( HANDLE_SIZE + 4 ) / 2
77+ : x - ( HANDLE_SIZE + 4 ) / 2 ,
78+ position : useFixed ? "fixed" : "absolute" ,
79+ top : useFixed
80+ ? originY + y - ( HANDLE_SIZE + 4 ) / 2
81+ : y - ( HANDLE_SIZE + 4 ) / 2 ,
6782 width : HANDLE_SIZE + 4 ,
6883 zIndex : 22 ,
6984 } }
0 commit comments