91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

react拖拽自由布局怎么實現

小億
203
2024-02-01 17:33:50
欄目: 編程語言

在React中實現拖拽自由布局可以使用HTML5的拖放API。以下是一個簡單的實現示例:

首先,創建一個Draggable組件,用于包裝可拖拽的元素:

```javascript

import React from 'react';

const Draggable = ({ id, onDragStart, children }) => {

const handleDragStart = (event) => {

event.dataTransfer.setData('text/plain', id);

onDragStart(id);

};

return (

draggable

onDragStart={handleDragStart}

style={{ cursor: 'move' }}

>

{children}

);

};

export default Draggable;

```

然后,在父組件中創建一個容器元素,并監聽拖放事件:

```javascript

import React, { useState } from 'react';

import Draggable from './Draggable';

const FreeLayout = () => {

const [draggedItem, setDraggedItem] = useState(null);

const [items, setItems] = useState([]);

const handleDrop = (event) => {

event.preventDefault();

const itemId = event.dataTransfer.getData('text/plain');

const newItem = { id: itemId, x: event.clientX, y: event.clientY };

setItems([...items, newItem]);

setDraggedItem(null);

};

const handleDragOver = (event) => {

event.preventDefault();

};

const handleDragStart = (itemId) => {

setDraggedItem(itemId);

};

return (

onDrop={handleDrop}

onDragOver={handleDragOver}

style={{ width: '500px', height: '500px', border: '1px solid black' }}

>

{items.map((item) => (

key={item.id}

style={{

position: 'absolute',

left: item.x,

top: item.y,

border: '1px solid red',

padding: '10px',

}}

>

{item.id}

))}

Item 1

Item 2

);

};

export default FreeLayout;

```

在上面的示例中,FreeLayout組件中的state用于存儲已拖拽的元素的位置信息。Draggable組件用于封裝可拖拽的元素,并在拖拽開始時觸發回調函數。

在容器元素上監聽drop和dragover事件,并在drop事件中獲取拖拽的元素信息,并將其添加到state中。在拖拽元素上觸發dragstart事件時,將元素的id存儲在state中。

最后,根據state中的元素位置信息渲染拖拽的元素,并設置其位置為絕對定位。

這樣就實現了一個簡單的拖拽自由布局。你可以根據需求進行擴展和優化。

0

最新問答

相關問答

相關標簽

游戏| 珠海市| 田林县| 岑溪市| 资源县| 孟州市| 江西省| 霍山县| 土默特右旗| 塔城市| 荥经县| 喀喇沁旗| 略阳县| 奉贤区| 蓝田县| 方山县| 水城县| 伊宁县| 肇东市| 南雄市| 于都县| 元谋县| 景洪市| 长宁县| 鲁甸县| 万宁市| 老河口市| 高安市| 定南县| 阿城市| 静乐县| 奎屯市| 临澧县| 余干县| 呼图壁县| 闻喜县| 峨边| 冷水江市| 涡阳县| 日喀则市| 韶关市|