您的位置:首页 > 财经 > 金融 > 网页素材下载_太原网站制作机构_百度推广的优势_网页制作网站制作

网页素材下载_太原网站制作机构_百度推广的优势_网页制作网站制作

2025/6/30 9:06:24 来源:https://blog.csdn.net/qq_41211900/article/details/146454035  浏览:    关键词:网页素材下载_太原网站制作机构_百度推广的优势_网页制作网站制作
网页素材下载_太原网站制作机构_百度推广的优势_网页制作网站制作
npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities

 

import React, { useState } from 'react';
import {DndContext,DragOverlay,closestCenter,KeyboardSensor,PointerSensor,useSensor,useSensors,
} from '@dnd-kit/core';
import {arrayMove,SortableContext,sortableKeyboardCoordinates,verticalListSortingStrategy,useSortable,
} from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';// 可排序项组件
const SortableItem = ({ id, index, children }) => {const {attributes,listeners,setNodeRef,setActivatorNodeRef,transform,transition,isDragging,} = useSortable({ id });const style = {transform: CSS.Transform.toString(transform),transition,position: 'relative',display: 'flex',alignItems: 'center',gap: '12px',padding: '16px',margin: '8px 0',background: isDragging ? 'transparent' : 'white',borderRadius: '4px',boxShadow: isDragging ? 'none' : '0 1px 3px rgba(0,0,0,0.12)',};return (<div ref={setNodeRef} style={style} {...attributes}>{/* 原位置虚线框 */}{isDragging && (<div style={{position: 'absolute',top: 0,left: 0,width: '100%',height: '100%',border: '2px dashed #1890ff',borderRadius: '4px',opacity: 0.8}} />)}{/* 拖拽手柄 */}<divref={setActivatorNodeRef}{...listeners}style={{cursor: isDragging ? 'grabbing' : 'grab',padding: '8px',background: '#f0f0f0',borderRadius: '4px',display: 'flex',flexDirection: 'column',gap: '4px',}}>{[...Array(3)].map((_, i) => (<divkey={i}style={{width: '4px',height: '4px',background: '#666',borderRadius: '50%',}}/>))}</div><div>{children}</div></div>);
};// 主组件
const App = () => {const [items, setItems] = useState([{ id: '1', text: 'Item 1' },{ id: '2', text: 'Item 2' },{ id: '3', text: 'Item 3' },{ id: '4', text: 'Item 4' },]);const [activeId, setActiveId] = useState(null);const sensors = useSensors(useSensor(PointerSensor, {activationConstraint: {distance: 8,},}),useSensor(KeyboardSensor, {coordinateGetter: sortableKeyboardCoordinates,}));const handleDragStart = ({ active }) => {setActiveId(active.id);};const handleDragEnd = ({ active, over }) => {setActiveId(null);if (active.id !== over?.id) {setItems((items) => {const oldIndex = items.findIndex((i) => i.id === active.id);const newIndex = items.findIndex((i) => i.id === over?.id);return arrayMove(items, oldIndex, newIndex);});}};return (<div style={{ maxWidth: '600px', margin: '2rem auto', padding: '0 1rem' }}><DndContextsensors={sensors}collisionDetection={closestCenter}onDragStart={handleDragStart}onDragEnd={handleDragEnd}><SortableContextitems={items}strategy={verticalListSortingStrategy}>{items.map((item, index) => (<SortableItem key={item.id} id={item.id} index={index}>{item.text}</SortableItem>))}</SortableContext>{/* 拖拽预览层 */}<DragOverlay>{activeId ? (<div style={{padding: '16px',background: 'white',borderRadius: '4px',boxShadow: '0 4px 8px rgba(0,0,0,0.2)',transformOrigin: 'center center'}}>{items.find(item => item.id === activeId)?.text}</div>) : null}</DragOverlay></DndContext></div>);
};export default App;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com