Skip to Content
代码示例Whiteboard

套索选择

在此示例中,你可以使用套索选择工具在窗格上选择多个项目。点击并拖动即可创建选择区域,该区域内的所有项目都将被选中。

¥In this example, you can select multiple items on the pane using a lasso selection tool. Click and drag to create a selection area, and all items within that area will be selected.

  • 套索绘图:使用指针事件绘制自由选择区域

    ¥Lasso Drawing: Draw freehand selection areas using pointer events

  • 部分/全部选择:在选择被套索部分或完全包围的节点之间切换。

    ¥Partial/Full Selection: Toggle between selecting nodes partially or fully enclosed by the lasso

  • 视觉反馈:绘制选择区域时提供实时视觉反馈

    ¥Visual Feedback: Real-time visual feedback while drawing the selection area

  • 画布渲染:使用 HTML5 Canvas 实现流畅的绘图性能。

    ¥Canvas Rendering: Uses HTML5 Canvas for smooth drawing performance

import { useCallback, useState } from 'react'; import { ReactFlow, useNodesState, useEdgesState, addEdge, Controls, Background, Panel, } from '@xyflow/react'; import { Lasso } from './Lasso'; import '@xyflow/react/dist/style.css'; const initialNodes = [ { id: '1', position: { x: 0, y: 0 }, data: { label: 'Hello' }, }, { id: '2', position: { x: 300, y: 0 }, data: { label: 'World' }, }, ]; const initialEdges = []; export default function LassoSelectionFlow() { const [nodes, _, onNodesChange] = useNodesState(initialNodes); const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); const onConnect = useCallback((params) => setEdges((els) => addEdge(params, els)), []); const [partial, setPartial] = useState(false); const [isLassoActive, setIsLassoActive] = useState(true); return ( <ReactFlow nodes={nodes} edges={edges} onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} onConnect={onConnect} fitView > <Controls /> <Background /> {isLassoActive && <Lasso partial={partial} />} <Panel position="top-left" className="lasso-controls"> <div className="xy-theme__button-group"> <button className={`xy-theme__button ${isLassoActive ? 'active' : ''}`} onClick={() => setIsLassoActive(true)} > Lasso Mode </button> <button className={`xy-theme__button ${!isLassoActive ? 'active' : ''}`} onClick={() => setIsLassoActive(false)} > Selection Mode </button> </div> <label> <input type="checkbox" checked={partial} onChange={() => setPartial((p) => !p)} className="xy-theme__checkbox" /> Partial selection </label> </Panel> </ReactFlow> ); }
Last updated on