Add zoom on mousewheel
This commit is contained in:
parent
6eaad6e720
commit
cfa60763a0
@ -1,4 +1,4 @@
|
|||||||
import React, { useContext, useRef, useState } from "react";
|
import React, { useContext, useRef, useState, useEffect } from "react";
|
||||||
import { useDrop } from "react-dnd";
|
import { useDrop } from "react-dnd";
|
||||||
import Table from "./table";
|
import Table from "./table";
|
||||||
import {
|
import {
|
||||||
@ -51,6 +51,7 @@ export default function Canvas(props) {
|
|||||||
mouseY: 0,
|
mouseY: 0,
|
||||||
});
|
});
|
||||||
const [cursor, setCursor] = useState("default");
|
const [cursor, setCursor] = useState("default");
|
||||||
|
const [zoom, setZoom] = useState(1);
|
||||||
|
|
||||||
const canvas = useRef(null);
|
const canvas = useRef(null);
|
||||||
|
|
||||||
@ -347,6 +348,26 @@ export default function Canvas(props) {
|
|||||||
[tables, areas]
|
[tables, areas]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handleMouseWheel = (e) => {
|
||||||
|
// const zoomDirection = e.deltaY > 0 ? "out" : "in";
|
||||||
|
e.preventDefault();
|
||||||
|
if (e.deltaY <= 0 ) {
|
||||||
|
setZoom((prev) => prev * 1.1);
|
||||||
|
} else {
|
||||||
|
setZoom((prev) => prev / 1.1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const canvasElement = canvas.current;
|
||||||
|
canvasElement.addEventListener("wheel", handleMouseWheel, {
|
||||||
|
passive: false,
|
||||||
|
});
|
||||||
|
return () => {
|
||||||
|
canvasElement.removeEventListener("wheel", handleMouseWheel);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div ref={drop} className="flex-grow h-full" id="canvas">
|
<div ref={drop} className="flex-grow h-full" id="canvas">
|
||||||
<div ref={canvas} className="w-full h-full">
|
<div ref={canvas} className="w-full h-full">
|
||||||
@ -385,47 +406,53 @@ export default function Canvas(props) {
|
|||||||
height="100%"
|
height="100%"
|
||||||
fill="url(#pattern-circles)"
|
fill="url(#pattern-circles)"
|
||||||
></rect>
|
></rect>
|
||||||
{areas.map((a) => (
|
<g style={{ transform: `scale(${zoom})`, transformOrigin: "0 0" }}>
|
||||||
<Area
|
{areas.map((a) => (
|
||||||
key={a.id}
|
<Area
|
||||||
areaData={a}
|
key={a.id}
|
||||||
onMouseDown={(e) => handleMouseDownRect(e, a.id, ObjectType.AREA)}
|
areaData={a}
|
||||||
setResize={setAreaResize}
|
onMouseDown={(e) =>
|
||||||
initCoords={initCoords}
|
handleMouseDownRect(e, a.id, ObjectType.AREA)
|
||||||
setInitCoords={setInitCoords}
|
}
|
||||||
></Area>
|
setResize={setAreaResize}
|
||||||
))}
|
initCoords={initCoords}
|
||||||
{tables.map((table) => (
|
setInitCoords={setInitCoords}
|
||||||
<Table
|
></Area>
|
||||||
key={table.id}
|
))}
|
||||||
tableData={table}
|
{tables.map((table) => (
|
||||||
setOnRect={setOnRect}
|
<Table
|
||||||
handleGripField={handleGripField}
|
key={table.id}
|
||||||
setLine={setLine}
|
tableData={table}
|
||||||
onMouseDown={(e) =>
|
setOnRect={setOnRect}
|
||||||
handleMouseDownRect(e, table.id, ObjectType.TABLE)
|
handleGripField={handleGripField}
|
||||||
}
|
setLine={setLine}
|
||||||
selectedTable={props.selectedTable}
|
onMouseDown={(e) =>
|
||||||
setSelectedTable={props.setSelectedTable}
|
handleMouseDownRect(e, table.id, ObjectType.TABLE)
|
||||||
/>
|
}
|
||||||
))}
|
selectedTable={props.selectedTable}
|
||||||
{linking && (
|
setSelectedTable={props.setSelectedTable}
|
||||||
<path
|
/>
|
||||||
d={`M ${line.startX} ${line.startY} L ${line.endX} ${line.endY}`}
|
))}
|
||||||
stroke="red"
|
{linking && (
|
||||||
strokeDasharray="8,8"
|
<path
|
||||||
/>
|
d={`M ${line.startX} ${line.startY} L ${line.endX} ${line.endY}`}
|
||||||
)}
|
stroke="red"
|
||||||
{relationships.map((e, i) => (
|
strokeDasharray="8,8"
|
||||||
<Relationship key={i} data={e} />
|
/>
|
||||||
))}
|
)}
|
||||||
{notes.map((n) => (
|
{relationships.map((e, i) => (
|
||||||
<Note
|
<Relationship key={i} data={e} />
|
||||||
key={n.id}
|
))}
|
||||||
data={n}
|
{notes.map((n) => (
|
||||||
onMouseDown={(e) => handleMouseDownRect(e, n.id, ObjectType.NOTE)}
|
<Note
|
||||||
></Note>
|
key={n.id}
|
||||||
))}
|
data={n}
|
||||||
|
onMouseDown={(e) =>
|
||||||
|
handleMouseDownRect(e, n.id, ObjectType.NOTE)
|
||||||
|
}
|
||||||
|
></Note>
|
||||||
|
))}
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user