Fix pattern dragging and vertical scrolling

This commit is contained in:
wuyanwanwu
2026-08-14 00:46:42 +08:00
parent b81613e598
commit 193f55fe30
14 changed files with 44 additions and 21 deletions
+26 -3
View File
@@ -611,7 +611,8 @@ export default function Home() {
if (event.button !== 0) return;
const stage = patternStageRef.current;
if (!stage) return;
stage.setPointerCapture(event.pointerId);
suppressCanvasClickRef.current = false;
event.currentTarget.setPointerCapture(event.pointerId);
patternDragRef.current = {
pointerId: event.pointerId,
x: event.clientX,
@@ -643,7 +644,23 @@ export default function Home() {
suppressCanvasClickRef.current = drag.moved;
patternDragRef.current = null;
stage?.classList.remove("is-dragging");
if (stage?.hasPointerCapture(event.pointerId)) stage.releasePointerCapture(event.pointerId);
if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);
};
const handlePatternPointerCancel = (event: React.PointerEvent<HTMLCanvasElement>) => {
const drag = patternDragRef.current;
if (drag?.pointerId !== event.pointerId) return;
patternDragRef.current = null;
suppressCanvasClickRef.current = false;
patternStageRef.current?.classList.remove("is-dragging");
if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);
};
const handlePatternLostPointerCapture = (event: React.PointerEvent<HTMLCanvasElement>) => {
if (patternDragRef.current?.pointerId !== event.pointerId) return;
patternDragRef.current = null;
suppressCanvasClickRef.current = false;
patternStageRef.current?.classList.remove("is-dragging");
};
const handleCanvasClick = (event: React.MouseEvent<HTMLCanvasElement>) => {
@@ -662,6 +679,10 @@ export default function Home() {
};
const handleCanvasMove = (event: React.MouseEvent<HTMLCanvasElement>) => {
if (patternDragRef.current?.moved) {
setHoveredPixel(null);
return;
}
const canvas = canvasRef.current;
if (!canvas) return;
const rect = canvas.getBoundingClientRect();
@@ -798,7 +819,9 @@ export default function Home() {
onPointerDown={handlePatternPointerDown}
onPointerMove={handlePatternPointerMove}
onPointerUp={handlePatternPointerUp}
onPointerCancel={handlePatternPointerUp}
onPointerCancel={handlePatternPointerCancel}
onLostPointerCapture={handlePatternLostPointerCapture}
onContextMenu={(event) => event.preventDefault()}
onClick={handleCanvasClick}
onMouseMove={handleCanvasMove}
onMouseLeave={() => setHoveredPixel(null)}