diff --git a/Docker部署/README.md b/Docker部署/README.md index 1bf77aa..7211238 100644 --- a/Docker部署/README.md +++ b/Docker部署/README.md @@ -140,3 +140,8 @@ cd WebSite npm run build npm run serve -- --host 0.0.0.0 --port 4000 ``` + +## 六、2026-05-24 交互修正 + +- 逆向工作区切换构件层级时,可见 STL 构件会显示加载进度,避免高精度预览加载期间误判为构件不显示。 +- DICOM 与逆向分割映射画布的滚轮缩放使用非被动 wheel 监听,修正浏览器控制台 `Unable to preventDefault inside passive event listener invocation` 警告。 diff --git a/WebSite/src/components/ProjectLibrary.tsx b/WebSite/src/components/ProjectLibrary.tsx index 41ef090..92caee6 100644 --- a/WebSite/src/components/ProjectLibrary.tsx +++ b/WebSite/src/components/ProjectLibrary.tsx @@ -359,6 +359,7 @@ function getDicomDisplaySliceNumber(sliceIndex: number, totalSlices: number) { } function DicomCanvas({ preview, rotation, resetSignal }: { preview: DicomPreview; rotation: number; resetSignal: number }) { + const viewportRef = useRef(null); const canvasRef = useRef(null); const [viewport, setViewport] = useState({ scale: 1, offsetX: 0, offsetY: 0 }); const [isPanning, setIsPanning] = useState(false); @@ -383,14 +384,27 @@ function DicomCanvas({ preview, rotation, resetSignal }: { preview: DicomPreview setViewport({ scale: 1, offsetX: 0, offsetY: 0 }); }, [resetSignal]); - const handleWheel = (event: React.WheelEvent) => { - event.preventDefault(); - const scaleFactor = event.deltaY > 0 ? 0.9 : 1.1; - setViewport((current) => ({ - ...current, - scale: Math.max(0.35, Math.min(6, current.scale * scaleFactor)), - })); - }; + useEffect(() => { + const element = viewportRef.current; + if (!element) { + return; + } + + const handleWheel = (event: WheelEvent) => { + event.preventDefault(); + const scaleFactor = event.deltaY > 0 ? 0.9 : 1.1; + setViewport((current) => ({ + ...current, + scale: Math.max(0.35, Math.min(6, current.scale * scaleFactor)), + })); + }; + + element.addEventListener('wheel', handleWheel, { passive: false }); + return () => { + element.removeEventListener('wheel', handleWheel); + }; + }, []); + const handlePointerDown = (event: React.PointerEvent) => { if (event.button !== 0) { return; @@ -431,8 +445,8 @@ function DicomCanvas({ preview, rotation, resetSignal }: { preview: DicomPreview return (