亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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

最新問答

相關問答

相關標簽

阿坝县| 济阳县| 衢州市| 丰原市| 龙井市| 宜丰县| 饶河县| 桑日县| 海盐县| 礼泉县| 淮北市| 凯里市| 包头市| 长葛市| 甘德县| 广东省| 叶城县| 敦化市| 泗阳县| 鹤峰县| 民县| 虹口区| 三明市| 海宁市| 康平县| 邵武市| 嘉定区| 中西区| 西林县| 景德镇市| 长治县| 延边| 建阳市| 临海市| 吴忠市| 东乡县| 保亭| 滕州市| 都安| 十堰市| 呈贡县|